从模板传递的可变属性未更新

时间:2016-12-06 13:15:02

标签: ember.js

我有一个案例,我将一个属性传递给包裹在mut助手中的子组件。然后我在子组件中更新此值,并使用闭包操作将操作发送到父组件。

然后,如果我使用get在父组件中读取此值,则会得到正确的值。但是,如果我将此属性传递给模板中的操作,则不会更新值。

我提供Ember-Twiddle来说明此问题(请查看console.log)。

我在这个解决方案中遗漏了什么?还是按预期工作?请查看onInnerUp控制器中的index操作,了解我要做的事情。

我知道这是一个非常凌乱的描述,希望有人能理解我在努力的是什么

1 个答案:

答案 0 :(得分:2)

它按预期工作。这就是为什么?

当模板index.hbs在某个时刻呈现时,它会通过动作助手创建一个动作,并将当前值分配给controllerVal。在你的情况下;在初始渲染之后,该值为0.

只有在重新渲染模板后才会重新创建操作。在你的旋转中,你不是在等待模板重新渲染并立即触发动作(已经使用之前的controllerVal值创建了动作)。即使在controllerValvalue增加时,my-component.js会自动增加(由于双向绑定);该动作尚未重新创建并保留以前的值;因此,您获得的分配给controllerVal的previus值作为您的操作的参数。我希望我能够以一种简单的方式解释发生了什么。

事实上勒克斯已在上述评论中解释了克服这种情况的方法;但是我为你创建了一个修改过的twiddle。在这个旋风中,我没有立即触发行动;但是延迟它直到下一次渲染通过Ember.run.scheduleOnce(queue, target, method)完成。我使用afterRender队列来等待重新呈现模板。如果您愿意,可以进一步查看Ember运行循环。我猜This可能是一个很好的起点。我最诚挚的问候。