我遇到了一些特殊的行为。事情是我理解弃用警告,然而,它不应该发生,因为观察',恕我直言,不使用吸气剂,因此,设置属性不应该导致弃用。
我使用的是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挂钩。我认为服务查询会以某种方式导致它......但我没有足够的服务经验来确定。
答案 0 :(得分:1)
我无法看到足够的{{my-component}}
代码,但我的猜测是changed
或some_internal_value
或其中一个依赖关系正在作为渲染生命周期钩子的一部分更新。通常这是willRender
或didInsertElement
。检查组件中的那些,尝试暂时将它们注释掉以进行测试。
有时需要afterRender
,但你应该尽可能地避免它。