Ember js:仅设置一次属性(在观察者中)抛出弃用警告您在单个渲染中修改了X两次

时间:2015-11-30 12:06:52

标签: ember.js

我遇到了一些特殊的行为。事情是我理解弃用警告,然而,它不应该发生,因为观察',恕我直言,不使用吸气剂,因此,设置属性不应该导致弃用。

我使用的是Ember 2.2.0和Ember-Cli 1.13.8。一切都在组件中构建,如果需要,还有服务(全球单身人士)。这是我的代码的简化版本。我应该制作一个JSFiddle并尝试重现它,但我想有人可能会直接发现错误。

父组件模板:

{{my-component model=service.currentModel changed=changed}}

MY-component.js:

watchChanged: function() {
    this.set('model', this.get('some_internal_value')); //this throws deprecation, even though it should not
    this.get('parentView').send('resetChanged'); // reset changed in the parent
}.observes('changed', 'some_internal_value')

我使用调试器并且watchChanged被称为EXACTLY ONCE,尽管如此,抛出了弃用警告。代码工作正常,除了弃用警告。有什么想法吗?

我的解决方法是将该集合作为后续版本中的任务来完成。排队,但这不是我遇到的问题的解决方案。

什么是" ember-way"在这种情况下?这是我的错误还是缺乏理解?

修改:交叉发布here

编辑x1:在父级和子级中没有实现didInsertElement / willInsertElement挂钩。我认为服务查询会以某种方式导致它......但我没有足够的服务经验来确定。

1 个答案:

答案 0 :(得分:1)

我无法看到足够的{{my-component}}代码,但我的猜测是changedsome_internal_value或其中一个依赖关系正在作为渲染生命周期钩子的一部分更新。通常这是willRenderdidInsertElement。检查组件中的那些,尝试暂时将它们注释掉以进行测试。

有时需要afterRender,但你应该尽可能地避免它。