我遇到了一些特殊的行为 . 事情是我理解弃用警告,然而,它不应该作为'观察'发生,恕我直言,不使用吸气剂,因此,设置属性不应该导致弃用 .
我使用的是Ember 2.2.0和Ember-Cli 1.13.8 . 一切都在组件中构建,如果需要,还有服务(全球单身人士) . 这是我的代码的简化版本 . 我应该制作一个JSFiddle并尝试重现它,但我想有人可能会直接发现错误 .
父组件模板:
{{my-component model=service.currentModel changed=changed}}
我-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,尽管如此,抛出了弃用警告 . 代码工作正常,除了弃用警告 . 有任何想法吗?
我的解决方法是将set设置为'afterRender'队列中的任务,但这不是我遇到的问题的解决方案 .
在这种情况下,“余烬之路”是什么?这是我的错误还是缺乏理解?
编辑:交叉发布here .
编辑x1:在父级和子级中没有实现didInsertElement / willInsertElement挂钩 . 我认为服务查询是以某种方式导致它...但我没有足够的服务经验来肯定地说 .
1 回答
我无法确切地看到足够的
{{my-component}}
代码,但我的猜测是changed
或some_internal_value
或其中一个依赖项正在作为渲染生命周期钩子的一部分进行更新 . 通常这是willRender
或didInsertElement
. 检查组件中的那些,尝试暂时将它们注释掉以进行测试 .有时需要
afterRender
,但你应该尽可能地避免它 .