1

StackOverflow エキスパートの皆様、こんにちは。

Ember.js の計算されたプロパティを使用して、オブジェクトが要求するものに戻る前にプロパティの値を変更できるかどうかを知りたいです。

次の簡単な例を想像してみてください: mail プロパティを持つ User オブジェクトがあります プロパティを設定すると、電子メール アドレスが first.last@example.com から first.last@anotherexample.com に変更され、それが返されます。

( User.get を介して) プロパティを要求すると、変更されたプロパティを取得したいと考えています。

フォーマットされた値を格納および取得する、formatted_mail のような別の「ヘルパー」プロパティを利用することで、かなり単純になるはずですが、追加のモデル プロパティなしでこのようなことができるのではないかと思います。

これまでのところ、私はこのcoffescriptコードを持っていますが、以前に設定したにもかかわらず、プロパティを読み取るときに常に「未定義」になるため、Emberによって値がどこにも保存されていないと思われます。

mail: ( ( key, value ) ->
    if arguments.length == 1
        return this.get 'mail'
    else
        return value.split( '@' )[0] + '@anotherexample.com'
).property 'mail'

ご協力いただきありがとうございます!

4

1 に答える 1

1

あなたは解決に近づいています。

計算されたプロパティは常にデフォルトで Ember にキャッシュされるため ( を使用してこの動作を無効にすることができます) 、デフォルト値を指定する場合を除いて、 が 1 の.volatile()場合に何をするかを指定する必要はありません。arguments.length

したがって、ここでは次のようになります。

App.User = Ember.Object.extend({
  mail: function(key, value) {
    if (arguments.length === 2) {
      return value.split('@')[0] + "@tieto.com";
    }
    return null;
  }.property()
});

return nullデフォルト値を指定するだけです。

プロパティを設定するmailと、返された値がキャッシュされ、このプロパティを再計算せずに常に返されます。

mailプロパティが他のプロパティに依存しないという理由だけでこれを行うことができることに注意してください。で宣言していた場合.property('anotherProperty')mailプロパティは変更されるたびに再計算されanoterPropertyます。したがって、上記の例では、にリセットされnullます。

この JSFiddle で試すことができます。

于 2013-02-15T13:43:56.697 に答える