2015-10-15 50 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