【问题标题】:Ember.ContainerView not updating in response to childViews.push(...)Ember.ContainerView 未响应 childViews.push(...) 更新
【发布时间】:2013-01-29 12:21:28
【问题描述】:

我在 1.0-pre4 中出现了奇怪的行为。我通过{{view Ember.ContainerView viewName="dashboardView"}}Ember.ContainerView 添加到我的模板中。当我将视图推送到其childViews 数组时,DOM 不会更新。这在 pre2 中有效。

这是jsfiddle。更奇怪的是,childViews.length 似乎没有更新......或者更确切地说,如果您查看模板与 childViewCount 的直接输出,它会更新但不会更新(?!?)推送两个视图后立即。

更新

下面的答案是正确的,我的 jsfiddle 应该使用 .pushObject,而不是 .push()...但我的原始代码实际上使用了 .pushObject。相反,它看起来像是 Firefox 10 中的错误,请参阅 cmets on answer。

更新 2

与主人确认,提交issue #1952

【问题讨论】:

    标签: ember.js


    【解决方案1】:

    您需要确保您使用的是 EmberJS 等效项,以便您的绑定工作。在您的示例中,您使用了 push,其行为与 pushObject 几乎完全相同,但 pushObject 符合 KVO(键值观察/绑定),因此 Ember 可以做它的事情。

    我已更新您的 JSFiddle 以反映这一点,它再次为您工作:http://jsfiddle.net/RCLd7/8/ 但我所做的只是在两个地方将 push 更改为 pushObject。如果我们要使用push,那么 Ember 将需要引入轮询,它没有,以发现更改,而不是通过 pushObject 自动通知。

    本机 JavaScript 方法与 Ember 等效方法的其他一些示例:

    • 本机:push,对比 Ember:pushObject
    • 本机:pop,与 Ember:popObject
    • 本机:unshift,与 Ember:unshiftObject

    【讨论】:

    • Aw crap...好吧:你说得对,pushObject 解决了我的小提琴的问题。但是我回去查看了我的代码,我正在使用 pushObject... 现在我发现它是 Firefox 10 不起作用——你更新的小提琴在 IE8 中有效,但在 FF10 中无效(长度更新正确,但我在 DOM 中没有新的 div)。 FF10 不支持吗? Looks like it should be... 我应该提交错误吗?同样,这曾经在 pre2 中工作。
    • 次要更新,在 ContainerView 上添加显式 .rerender() 调用使子视图在 FF10 中正确呈现,但显然这不是必需的。我明天左右更新master,看看它是否仍然存在,如果存在我会提交一个错误。
    • 这看起来很奇怪!是的,如果从 master 更新后仍然存在,我想我会提交一个错误。
    • 与 JavaScript 的 splice 等效的 Ember 是 replace(尽管签名略有不同:它需要插入对象数组而不是可变长度的参数列表)。但在很多情况下,insertAtremoveAt 可能是更好的选择。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-13
    • 2016-06-06
    相关资源
    最近更新 更多