请点击此处:https://ember-twiddle.com/2150099882893760cef237ff2bd22e85
基本上,在crit-service
我创建了Ember Objects“Crits”和“Crit”,并用一些数据填充它们。
crit-service
由两个不同的组件使用,它们基本上做同样的事情:显示Crits。
问题是“更改”按钮不起作用。通过调试,我看到值已更改,但视图未更新。为什么是这样?由于Ember.Object是Observable,不应该设置值通知模板?最重要的是,我怎样才能让它发挥作用?
P.S。我通过使用Ember.A()而不是Objects看到了一种解决方法。但是,这会添加样板,因为我的数据模型实际上是对象而不是键值对的数组。
答案 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部分。但是,您必须在两个组件的公共根组件或两个组件上调用它。