2

我在 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()

我无法弄清楚我应该调用什么方法以及需要返回什么。

4

1 回答 1

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();
    })()
});
于 2012-04-26T16:16:36.650 回答