Skip to content

Instantly share code, notes, and snippets.

@mattduffield
Last active October 10, 2016 18:05
Show Gist options
  • Select an option

  • Save mattduffield/5c8e1371cf727926fb3b8e7d8a6e4019 to your computer and use it in GitHub Desktop.

Select an option

Save mattduffield/5c8e1371cf727926fb3b8e7d8a6e4019 to your computer and use it in GitHub Desktop.
Aurelia Gist - Custom Binding Behavior - version 2
<template>
<require from='unique-binding-behavior'></require>
<h1>${title}</h1>
<form>
<label>User Name</label>
<input value.bind="username & unique:$this:uniqueNames:'lookupResult' & debounce:800">
<p class="help-text">${lookupResult}</p>
</form>
</template>
export class App {
title = 'Custom Binding Behavior';
username = '';
uniqueNames = ['matt', 'kevin', 'larry'];
lookupResult = '';
constructor() {
}
}
<!doctype html>
<html>
<head>
<title>Aurelia</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<style>
.panel {
border: 1px solid black;
}
.panel-heading {
background: lightblue;
color: white;
border-bottom: 1px solid black;
padding: 3px;
font-size: 20px;
}
.panel-body {
padding: 3px;
}
</style>
</head>
<body aurelia-app>
<h1>Loading...</h1>
<script src="https://jdanyow.github.io/rjs-bundle/node_modules/requirejs/require.js"></script>
<script src="https://jdanyow.github.io/rjs-bundle/config.js"></script>
<script src="https://jdanyow.github.io/rjs-bundle/bundles/aurelia.js"></script>
<script src="https://jdanyow.github.io/rjs-bundle/bundles/babel.js"></script>
<script>
require(['aurelia-bootstrapper']);
</script>
</body>
</html>
const interceptMethods = ['updateTarget', 'updateSource', 'callSource']; export class UniqueBindingBehavior { uniqueFunc(method, update, $this, uniqueArray, resultHandler, value) { if (uniqueArray.includes(value)) { $this[resultHandler] = 'Sorry this username has already been used.'; } else { $this[resultHandler] = ''; } update(value); } bind(binding, scope, $this, uniqueArray, resultHandler) { let i = interceptMethods.length; while (i--) { let method = interceptMethods[i]; if (!binding[method]) { continue; } binding[`intercepted-${method}`] = binding[method]; let update = binding[method].bind(binding); binding[method] = this.uniqueFunc.bind(binding, method, update, $this, uniqueArray, resultHandler); } } unbind(binding, scope) { let i = interceptMethods.length; while (i--) { let method = interceptMethods[i]; if (!binding[method]) { continue; } binding[method] = binding[`intercepted-${method}`]; binding[`intercepted-${method}`] = null; } } }
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment