首页 文章

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

提问于
浏览
0

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

我使用的是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 回答

  • 1

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

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

相关问题