2

私はember-cli経由でEmberを学んでいます。「計算されたプロパティは、何かが取得しようとしない限り計算されない」ことに関連していると思われる問題がありますが、この場合、プロパティを「取得」する方法がわかりません。ember-cli を使用して、アプリ、1 つのコントローラー、1 つのサービス、および 1 つのテンプレートを作成しました。

ember new st
cd st/
ember g controller index
ember g service start
ember g template index

コントローラ:

import Ember from 'ember';

export default Ember.Controller.extend({
  start: Ember.inject.service(),
  value: Ember.computed('start', function () { 
    return this.get('start').value;
  }),
  actions: {
    update: function() {
      this.get('start').update();
      alert(this.get('start').value);
  }
 }
});

サービス:

import Ember from 'ember';

export default Ember.Service.extend({
  value: "original",
  update: function() {
    this.set('value', "updated");
  }
});

テンプレート:

<p>{{value}}</p>
<br>
<button {{action "update"}}>Update</button><br>

次に、これを「エンバーサーブ」で提供します。予想どおり、表示される値は初期値「オリジナル」です。[更新] ボタンをクリックすると、新しい値が「更新されました」というアラートが表示されますが、元の値は画面に表示されたままです。計算されて更新されるように、この注入されたプロパティを「取得」するにはどうすればよいですか?

ember-cli は 1.13.8、ember 自体は 2.0.1 です

4

1 に答える 1

1

プロパティに依存していると主張していstartますが、startプロパティ自体は変更されていません。valueプロパティは変更されstartています。valueのプロパティに依存するように変更する必要がありますstart。さらに、より深いプロパティをget関数内で取得できます。

export default Ember.Controller.extend({
  start: Ember.inject.service(),
  value: Ember.computed('start.value', function () { 
    return this.get('start.value');
  }),
  actions: {
    update: function() {
      this.get('start').update();
      alert(this.get('start.value'));
  }
 }
});

キックとクスクスの場合、これは 2 つの方法でさらに簡単に記述できます。

エイリアスを使用します。

export default Ember.Controller.extend({
  start: Ember.inject.service(),
  value: Ember.computed.alias('start.value'),
  actions: {
    update: function() {
      this.get('start').update();
      alert(this.get('start.value'));
    }
  }
});

テンプレートで参照するだけ

export default Ember.Controller.extend({
  start: Ember.inject.service(),
  actions: {
    update: function() {
      this.get('start').update();
      alert(this.get('start.value'));
  }
 }
});

<p>{{start.value}}</p>
<br>
<button {{action "update"}}>Update</button><br>
于 2015-08-27T05:38:19.117 に答える