我试图理解ember-form-for(https://github.com/martndemus/ember-form-for/blob/master/addon/components/form-field.js#L64)中的问题,但恕我直言,代码并不重要,它只是一个普通的组件。
当不重新渲染时,该组件可以正常工作。在 init()中,我们将设置(此,'名称','值'),它按预期工作。但是在重新渲染之后, init()未按预期调用(https://guides.emberjs.com/v3.0.0/components/the-component-lifecycle/),该对象具有与渲染前相同的标识符,但是在 init中设置的值()丢失了。我不明白为什么。
答案 0 :(得分:0)
在ember guides中我们了解到有一个生命周期钩子也会被重新调用,didReceiveAttrs
钩子。
因此,使用此方法,您的组件将根据更改的属性更改状态。
答案 1 :(得分:0)
[
'inputClasses',
...
].forEach((type) => {
set(this, type, (get(this, type) || []).concat(get(this, `config.${type}`)));
});
问题是实例变量不是一个好的解决方案。 inputClasses (和其他)也用作组件的属性。这意味着重新渲染后它们会被原始值覆盖(并且不使用.concat)。我知道两个解决方案: