2

実際に変更を設定してトリガー/キャンセルする前に、いくつかの値チェックを実行したいEmberオブジェクトに単純なプロパティがあります。これに関するコードサンプルや情報を見つけるのはあまり運がありません。私が他のフレームワークから慣れているパターンは、セッター内でそれを行うことです-次のようなものです:

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 に答える