2

私はちょうど Ember を学んでいて、計算されたプロパティについて少し混乱しています。ガイドのすべては、姓と名から完全な名前を作成する計算されたプロパティなどの文字列を使用しています。 とにかく、構文が文字列の使用をほとんど要求しているように見えるため、整数の使用方法について混乱しています。

例として、コントローラーに というプロパティがありますcount

import Ember from 'ember';

export default Ember.Controller.extend({
  count: 0,

  counter: Ember.computed('count', function() {
    var num = `${this.get('count')}`;
    var newNum = parseInt(num) + 1;
    this.set('count', newNum);
    return this.get('count');
  })
});

私はこのコードが本当に悪いことを知っています。私がやろうとしていることと失敗していることを説明しようとしているだけです。Ember.computedが最初のパラメーターとして文字列を取るのはなぜですか?

また、文字列ではなく整数を操作しているときにthis.get、なぜ文字列を使用する必要があるのでしょうか。this.setint を手動で解析する必要があります。そうしないと、文字列が返されます。count プロパティが文字列に変換されるのはなぜですか?

とにかく、私が実行したときのエンバーインスペクターで

$E.get('count')

1 は正常に追加されますが、1 を追加し続けることができないため、実際のcountプロパティが更新されていないと思われます。

どうもありがとう。助けてくれてありがとう。

4

1 に答える 1

7

あなたのコードに基づいてEmber Twiddleをセットアップしました。私はあなたの質問のそれぞれに対処しようとします:

Ember.Objectは のラッパーと考えることができます{}キーはJavascript の文字列でEmber.Objectあるため、すべてのキーは文字列です。{}

に格納されている各プロパティの場合Ember.Object、そのプロパティは文字列をキーとする値です。その値を検索するには、キーによって指定された値の「パス」または「場所」を指定する必要があります (ハッシュ テーブルと同様)。getこれが、とで文字列を指定する必要がある理由ですset

値は、文字列だけでなく、Javascript の任意の型にすることができます。私が投稿したEmber Twiddleを見て、コンソールを開いてください。コードでnumは、 の値を変換する ES6 テンプレート文字列でラップしたため、 は文字列ですthis.get('count')


Ember.computedデータをテンプレートにレンダリングするように設計されました。次のことを理解することが重要です。

  • 怠け者
  • 計算結果をキャッシュします。
  • 計算済みプロパティは、依存するプロパティの 1 つ以上が変更された場合にのみ再計算されます。

を呼び出すときはEmber.computed、最初に任意の数の文字列を渡します。Ember.Object各文字列は、 CP が「依存する」(上の) 値へのパスです。

CP は遅延型であるため'counter'、コードまたはテンプレートでアクセスした場合にのみ計算されます。変更された場合'count'、キャッシュされた値は'counter'忘れられます。次にアクセスされとき'counter'に、再計算されます。

この場合、'counter'CP 関数は変更されないため、'count'一度だけ実行されます。これが、追加が 1 つだけ観察される理由です。

于 2016-03-12T12:23:46.850 に答える