Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save tomoguisuru/f53cbd56e441c84950ae8a24d48db03e to your computer and use it in GitHub Desktop.
Save tomoguisuru/f53cbd56e441c84950ae8a24d48db03e to your computer and use it in GitHub Desktop.
debounced-input
import Ember from 'ember';
import { task, timeout } from 'ember-concurrency';
const {
Component,
assert,
get,
set,
} = Ember;
export default Component.extend({
tagName: 'input',
attributeBindings: ['type', 'placeholder', 'value', 'name', 'tabindex'],
// bound attributes
type: 'text',
placeholder: '',
value: undefined,
name: undefined,
tabindex: undefined,
/**
* Delay before performing update callback
*/
timeout: 150,
/**
* Initial value
*/
initValue: undefined,
/**
* Callback to update property
*/
update: () => assert('debounced-input: You must supply a closure action named `update`'),
_updateValue: task(function* (value) {
set(this, 'value', value);
yield timeout(get(this, 'timeout'));
return get(this, 'update')(value);
}).restartable(),
/**
* keyUp event
* @param {Object} e
*/
keyUp(e) {
get(this, '_updateValue').perform(e.target.value);
},
/**
* Init the component
*/
init() {
this._super(...arguments);
set(this, 'value', get(this, 'initValue'));
}
});
import Ember from 'ember';
export default Ember.Controller.extend({
appName: 'Ember Twiddle',
callCount: 0,
value: null,
actions: {
updateValue(value) {
this.incrementProperty('callCount');
this.set('value', value);
}
}
});
<h1>Welcome to {{appName}}</h1>
<br>
<br>
{{outlet}}
<p>Controller was set: {{callCount}} times</p>
<p>Controller value is: {{value}}</p>
{{debounced-input update=(action (mut value))}}
<br>
<br>
<input value={{value}} oninput={{action "updateValue" value="target.value"}}>
{
"version": "0.12.1",
"EmberENV": {
"FEATURES": {}
},
"options": {
"use_pods": false,
"enable-testing": false
},
"dependencies": {
"jquery": "https://cdnjs.cloudflare.com/ajax/libs/jquery/1.11.3/jquery.js",
"ember": "2.12.0",
"ember-template-compiler": "2.12.0",
"ember-testing": "2.12.0"
},
"addons": {
"ember-data": "2.12.1",
"ember-concurrency": "0.8.3"
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment