Ember.js Ember.ContainerView未响应ChildView.push更新(…)
我在1.0-pre4中有奇怪的行为。我通过Ember.js Ember.ContainerView未响应ChildView.push更新(…),ember.js,Ember.js,我在1.0-pre4中有奇怪的行为。我通过{view Ember.ContainerView viewName=“dashboardView”}将Ember.ContainerView添加到我的模板中。当我将视图推入其childview数组时,DOM不会更新。这在pre2中起作用 这是一个例子。更奇怪的是,如果您查看模板与childViewCount的直接输出,它似乎不更新。childViews.length不更新……或者更确切地说,它会更新,也不会更新(?!?),而childViewCount
{view Ember.ContainerView viewName=“dashboardView”}
将Ember.ContainerView
添加到我的模板中。当我将视图推入其childview
数组时,DOM不会更新。这在pre2中起作用
这是一个例子。更奇怪的是,如果您查看模板与childViewCount的直接输出,它似乎不更新。childViews.length
不更新……或者更确切地说,它会更新,也不会更新(?!?),而childViewCount会在推送两个视图后立即更新
更新
下面的答案是正确的,我的JSFIDLE应该使用.pushObject
,而不是.push()
…但我的原始代码实际使用了.pushObject
。相反,它看起来像Firefox10中的一个bug,请参见答案上的注释
更新2
根据master,Field进行确认。您需要确保使用的是等效的EmberJS,以便绑定正常工作。在您的示例中,您使用了
push
,它的行为几乎与pushObject
完全相同,但是pushObject
符合KVO(键值观察/绑定),因此Ember可以完成它的任务
我已经更新了您的JSFIDLE以反映这一点,它再次为您工作:但我所做的更改是在两个位置将push
更改为pushObject
。如果我们要使用push
,那么Ember将需要引入轮询,而不是通过pushObject
自动通知发现更改
本机JavaScript方法与Ember等效方法的一些其他示例:
- 原生:
,与余烬:push
pushObject
- 本机:
,与余烬:pop
popObject
- 本机:
,与余烬:unshift
unshiftObject
push
,它的行为几乎与pushObject
完全相同,但是pushObject
符合KVO(键值观察/绑定),因此Ember可以完成它的任务
我已经更新了您的JSFIDLE以反映这一点,它再次为您工作:但我所做的更改是在两个位置将push
更改为pushObject
。如果我们要使用push
,那么Ember将需要引入轮询,而不是通过pushObject
自动通知发现更改
本机JavaScript方法与Ember等效方法的一些其他示例:
- 原生:
,与余烬:push
pushObject
- 本机:
,与余烬:pop
popObject
- 本机:
,与余烬:unshift
unshiftObject
- Aw-crap…好吧:你说得对,
pushObject
解决了我小提琴的问题。但我回头看了看我的代码,我用的是pushObject。。。现在我发现Firefox 10不起作用——你更新的提琴在IE8中起作用,但在FF10中不起作用(长度更新正确,但DOM中没有新的div)。不支持FF10吗?我应该提交一个bug吗?同样,这在pre2.Minor更新中也适用,在ContainerView上添加显式的.rerender()
调用可以使ChildView在FF10中正确呈现,尽管显然这不是必需的。我明天左右会更新到master,看看它是否仍然存在,如果仍然存在,我会提交一个bug。这看起来太奇怪了!是的,如果从master更新后仍然存在bug,我想我会提交一个bug。与JavaScript的splice
相当的余烬是(尽管签名略有不同:它需要插入一个对象数组,而不是一个可变长度的参数列表)。但在很多情况下,这可能是更好的选择。噢,废话……好吧:你说得对,pushObject
解决了我小提琴的问题。但我回头看了看我的代码,我用的是pushObject。。。现在我发现Firefox 10不起作用——你更新的提琴在IE8中起作用,但在FF10中不起作用(长度更新正确,但DOM中没有新的div)。不支持FF10吗?我应该提交一个bug吗?同样,这在pre2.Minor更新中也适用,在ContainerView上添加显式的.rerender()
调用可以使ChildView在FF10中正确呈现,尽管显然这不是必需的。我明天左右会更新到master,看看它是否仍然存在,如果仍然存在,我会提交一个bug。这看起来太奇怪了!是的,如果从master更新后仍然存在bug,我想我会提交一个bug。与JavaScript的splice
相当的余烬是(尽管签名略有不同:它需要插入一个对象数组,而不是一个可变长度的参数列表)。但在许多情况下,这可能是更好的选择。