2012-04-26 17 views
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() 

私は、私が呼び出すすべきかの方法を考え出す問題が発生したとしています何が返される必要があります。

+0

質問はOKですが、 eタイトルはありません。 「何が最善の方法なのか」は、「意見、議論、議論、ポーリング、拡張された議論を求めることが多い」ために、通常は「建設的ではない」ということになります。 – ajax333221

+0

Emberの働きパターン進化している。しかし大丈夫です。 – Kreegr

答えて

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

UPDATE

も、よりよい解決策が@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(); 
    })() 
}); 
+2

foo上の自己実行クロージャー内に_fooをカプセル化する方法:(function(){var _foo; return function(key、value){...}}) – Kreegr

+1

第3引数は、キャッシュされた値。 https://github.com/emberjs/ember.js/blob/master/packages/ember-metal/tests/computed_test.js#L241 – Manoharan

関連する問題