自定义对象上的Ember绑定

时间:2016-07-11 08:30:37

标签: javascript ember.js data-binding

请点击此处:https://ember-twiddle.com/2150099882893760cef237ff2bd22e85

基本上,在crit-service我创建了Ember Objects“Crits”和“Crit”,并用一些数据填充它们。

crit-service由两个不同的组件使用,它们基本上做同样的事情:显示Crits。

问题是“更改”按钮不起作用。通过调试,我看到值已更改,但视图未更新。为什么是这样?由于Ember.Object是Observable,不应该设置值通知模板?最重要的是,我怎样才能让它发挥作用?

P.S。我通过使用Ember.A()而不是Objects看到了一种解决方法。但是,这会添加样板,因为我的数据模型实际上是对象而不是键值对的数组。

1 个答案:

答案 0 :(得分:1)

这似乎是{{#each-in}}帮助程序的一个问题,它不会在更改时重新加载。快速解决方法是使用{{get}}帮助程序。

所以不要这样:

{{#each-in obj as |key val|}}
  {{key}}={{val}}
{{/each-in}}

这样做:

{{#each-in obj as |key|}}
  {{key}}={{get obj key}}
{{/each-in}}

但是,如果添加其他属性,将无法正常工作。

here是一个解决问题的工作方式。

另一个始终有效的解决方案是在组件上调用.rerender()。这要归功于glimmer,它只会更新已更改的DOM部分。但是,您必须在两个组件的公共根组件或两个组件上调用它。