2015-10-15 66 views
0

我剛開始使用Ember並遇到以下問題。我想觀察我商店內某件商品的價值是否發生了變化。據我所知,這是@each指令的用途。不幸的是,這不會觸發我的組件中的相應方法。Ember.js:讓組件觀察商店物品的值變化

我的代碼結構如下。 當前路線返回我的商店的一個子集,並具有更改其中一個項目的操作。

export default Ember.Route.extend({ 
    model: function() {                             
     this.store.push('node', {id: 1, x: 40, y:40}); 
     this.store.push('node', {id: 3, x: 50, y:50}); 
     return this.store.findAll("node"); 
    }, 
    actions: { 
     move: function(x, y) { 
      this.store.findRecord('node', 1).then(
       function(v) { 
        v.set("x", x); v.set("y", y); 
       }); 
     } 
    } 
}); 

我通過模板指令將模型傳遞給我的組件。

{{node-comp data=model}} 

現在,我想要得到的組件中的通知,在模型的變化值(即在我的例子行動「搬家」被稱爲)。我目前的方法如下所示:

export default Ember.Component.extend({ 
    rerender: function() { 
     console.log("rerender called"); 
    }.observes("[email protected]") 
}; 

我試過'data。[]'指令和'data。@ each.x'指令。但沒有導致期望的行爲。注意,通知組件的模板,即模型的項目列表在「移動」調用後得到更新。


我的 '餘燼-v' 輸出灰燼CLI的

未來版本將不支持V4.2.0。請更新至節點0.12或io.js. 版本:1.13.8找不到守望者,回退到NodeWatcher 以獲取文件系統事件。訪問 http://www.ember-cli.com/user-guide/#watchman瞭解更多信息。 node: 4.2.0 npm:2.13.4 os:linux x64

回答

0

您可以嘗試使用「hasDirtyAttributes」屬性。但是我不確定這是否適用於按{x:1}類似的對象。爲什麼不使用store.createRecord( '節點',{X:1})

http://emberjs.com/api/data/classes/DS.Model.html#property_hasDirtyAttributes

rerender: function() { 
     console.log("rerender called"); 
    }.observes("[email protected]") 

NB!這不適用於異步關係

順便說一句,這種渲染看起來很奇怪。

你的組件包含什麼?在模型更改之後,它看起來很奇怪,您可以在組件中直接綁定模型值。 component/file.js

{{#each data as |node|}} 
    {{node.x}} < changes when node changes 
{{/each}} 
+0

我的組件包含d3代碼。總體目標是在模型更改時更改我的d3可視化。我仍在研究是否燼是實現這一目標的正確框架。不幸的是,添加hasDirtyAttributs標誌沒有幫助。 – marcel

+0

我在我的項目中獲得了d3。數據可以直接綁定 - {{條形圖 數據= graphData.data isLoaded = graphData.data noDataText =無數據 }} –

+0

謝謝,但我看不出這可以幫助我,因爲我試圖組裝一個組件原子'd3元素'。因此,我無法恢復到預製組件。 – marcel