[英]Ember this.set in component
我似乎对Ember组件的init
属性做错了。
我的代码看起来像这样。
import Ember from 'ember';
export default Ember.Component.extend({
init(){
this._super(...arguments);
this.set('initial_value', this.get('value'));
},
change(e){
console.log('value should be reset to ' + this.get('initial_value')) //This prints the initial value correctly.
this.set('value', this.get('initial_value')); // this line does not update value.
//this.set('value', 'hello'); //this line does update value.
}
});
为什么我可以使用字符串文字更新value
,而不能使用this.get('initial_value')
更新value
?
我尝试了这段代码,将组件生命周期中的每个函数init
为init
。 我这样做是因为我认为它与渲染有关。 还是那样。
这是玩笑 。
既然您已经使用<input type="text" value={{value}}>
,则它是单向绑定。 即,在更改组件中的value
,更改将反映在输入框中,但是更改输入框中的值将不会更改组件中变量value
。
在Ember中,仅当组件中变量的值更改时DOM才会更新。 在my-component.js
,变量value
没有改变。 它仅包含字符串文字initial value
。
例如, this.set('value', Math.random());
这将在变量value
更改时起作用。
为什么我可以使用字符串文字更新值,而不能使用this.get('initial_value')更新值?
该值只能更改一次,因此只能执行一次。 (在第一次将值更改为字符串时)
要解决这个问题 ,您可以使用{{input value=value}}
来实现双向绑定。 编辑输入框时,变量value
更改。
重点关注时, this.set('value',this.get('initial_value'))
, this.set('value',this.get('initial_value'))
将根据需要设置初始值。
你可以只包括{{input value=value}}
在我-component.hbs文件,当你改变输入,它会调用change
功能在输入助手,它将调用change
你的组件的功能,将其复位即可initial_value
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.