【问题标题】:Why assigning a property at init and didUpdateAttrs are different?为什么在 init 和 didUpdateAttrs 分配属性不同?
【发布时间】:2016-05-15 18:58:38
【问题描述】:

Ember.js Guide,有一个这样的例子:

import Ember from 'ember';

export default Ember.Component.extend({
  init() {
    this._super(...arguments);
    this.errors = [];
  },

  didUpdateAttrs() {
    this._super(...arguments);
    this.set('errors', []);
  },

  ...
});

为什么分配给errors 属性在initdidUpdateAttrs?它们有什么区别?

已更新根据@locks 回答:

什么时候设置可观察性?初始化后?但是父组件的值在初始化之前已经分配给子组件的属性。

【问题讨论】:

    标签: ember.js ember-components


    【解决方案1】:

    这必须主要与可观察性有关。 在init 上,尚未设置可观察性,因此this.errors = []this.set('errors', []) 在功能上相似。

    如果您要在 didUpdateAttrs 生命周期挂钩内执行 this.errors = [],则相关的计算属性和模板不会更新。这是因为您目前需要 get/set 才能符合 KVO。

    【讨论】:

    • 何时设置可观察性?初始化后?父组件的值在初始化之前已经分配给子组件的属性。
    • 是的,在初始化之后。据我所知,设置可观察性是 Ember.Object 初始化过程的一部分
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-03-27
    • 2020-04-01
    • 2018-05-27
    • 2021-02-24
    • 2021-09-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多