Skip to content

Instantly share code, notes, and snippets.

@NullVoxPopuli
Last active September 20, 2019 15:53
Show Gist options
  • Save NullVoxPopuli/7029f3ada9c6e2e1b3d2f89ff97dcba8 to your computer and use it in GitHub Desktop.
Save NullVoxPopuli/7029f3ada9c6e2e1b3d2f89ff97dcba8 to your computer and use it in GitHub Desktop.
Native Proxy w/ Ember Object instances
import Ember from 'ember';
import ObjectProxy from '@ember/object/proxy';
import EmberObject from '@ember/object';
import { assert } from '@ember/debug';
let object = EmberObject.create({
name: 'Foo'
});
let object2 = EmberObject.create({
name: 'Foo2'
});
let target = EmberObject.create({
content: undefined,
});
let handler = {
get(target, name) {
if (name === 'content') {
return target.content;
}
assert('content is not set on proxy', target.content);
return target.content[name];
},
set(target, name, value) {
if (name === 'content') {
target.content = value;
return true;
}
assert('content is not set on proxy', target.content);
target.content[name] = value;
return true;
},
has(target, name) {
if (name === 'content') {
return true;
};
assert('content is not set on proxy', target.content);
return name in target.content;
},
};
let proxy = new Proxy(target, handler);
export default Ember.Route.extend({
model() {
proxy.content = object;
console.log(proxy.name);
proxy.content = object2;
console.log(proxy.name);
proxy.content = object;
proxy.name = "bar"
console.log(proxy.get('name'));
proxy.content = object2;
proxy.set('name', "bar")
console.log(proxy.get('name'));
return {};
}
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment