我在Ember对象上有一个简单属性,我想在实际设置和触发/取消更改之前运行一些值检查。我没有太多运气找到任何代码示例或信息。我习惯于从其他框架中使用的模式是在setter中执行它 - 类似于:
在Ember对象中
propertyName : function(key, value) {
// Setter
if (arguments !== 1) {
if (setCheckHere) {
return this._super(key, value); // ?? is this right?
}
// ?? if ignoring what should I return instead?
}
}.property()
我无法弄清楚我应该调用什么方法以及需要返回什么方法。
答案 0 :(得分:3)
我的建议如下,请参阅http://jsfiddle.net/pangratz666/NUTAz/:
Ember.Object.create({
_foo: undefined,
foo: function(key, value) {
// david
if (arguments.length === 1) {
return this._foo;
}
// setter
if (value === 42) {
// set the value because it's cool
this._foo = value;
}
// allow chaining, so this.set('foo', 12).set('name', 'Fünke');
return this;
}.property()
});
<强>更新强>
更好的解决方案是使用@mraken建议的闭包,请参阅http://jsfiddle.net/pangratz666/Zacfh/:
Ember.Object.create({
foo: (function() {
var _foo;
return function(key, value) {
// david
if (arguments.length === 1) {
return _foo;
}
// setter
if (value === 42) {
_foo = value;
}
return this;
}.property();
})()
});