在Ember中设置值之前如何检查值?

时间:2012-04-26 14:53:58

标签: javascript ember.js getter-setter

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

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

1 个答案:

答案 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();
    })()
});