Skip to content

Instantly share code, notes, and snippets.

@kkenan
Created February 10, 2016 12:03
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 kkenan/265267bc441ae05df255 to your computer and use it in GitHub Desktop.
Save kkenan/265267bc441ae05df255 to your computer and use it in GitHub Desktop.
New Twiddle
import Ember from 'ember';
function trackPropertyChanges(defaultValue) {
var value = defaultValue;
function updateChangedProperty(model, name, property, value) {
var changedProperties = model.get('changedProperties');
if (!changedProperties) {
changedProperties = Ember.Object.create();
model.set('changedProperties', changedProperties);
}
var propertyObject = changedProperties.get(property);
if (!propertyObject) {
propertyObject = Ember.Object.create();
changedProperties.set(property, propertyObject);
}
propertyObject.set(name, value);
}
return Ember.computed({
get: function() {
return value;
},
set: function(propertyName, propertyValue, oldProperyValue) {
updateChangedProperty(this, 'old', propertyName, oldProperyValue);
updateChangedProperty(this, 'new', propertyName, propertyValue);
value = propertyValue;
return propertyValue;
}
});
}
export default Ember.Controller.extend({
appName:'Ember Twiddle',
test: trackPropertyChanges('TEST'),
test1: trackPropertyChanges(),
obs: Ember.observer('test', 'test1', function(model, propertyName) {
var oldValue = this.get('changedProperties.' + propertyName + '.old');
var newValue = this.get('changedProperties.' + propertyName + '.new');
console.log(propertyName, ':', oldValue, ' -> ', newValue);
})
});
<h1>Welcome to {{appName}}</h1>
<br>
<br>
{{outlet}}
<br>
<br>
{{input value=test}}
{{input value=test1}}
{
"version": "0.5.0",
"EmberENV": {
"FEATURES": {}
},
"options": {
"enable-testing": false
},
"dependencies": {
"jquery": "https://cdnjs.cloudflare.com/ajax/libs/jquery/1.11.3/jquery.js",
"ember": "https://cdnjs.cloudflare.com/ajax/libs/ember.js/2.2.0/ember.debug.js",
"ember-data": "https://cdnjs.cloudflare.com/ajax/libs/ember-data.js/2.2.0/ember-data.js",
"ember-template-compiler": "https://cdnjs.cloudflare.com/ajax/libs/ember.js/2.2.0/ember-template-compiler.js"
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment