Ember this.set 在组件中
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')
更新?
我尝试了这段代码,为组件生命周期中的每个函数换出 init
。我这样做是因为我认为它与渲染有关;有点像。
这里是 twiddle.
您可以只在 my-component.hbs 文件中包含 {{input value=value}}
,当您更改输入时,它将调用输入助手中的 change
函数,该函数将调用 change
函数您的组件将其重置为 initial_value
.
既然你用过,<input type="text" value={{value}}>
,它的单向绑定。即,在组件中更改 value
时,更改将反映在输入框中,但更改输入框中的值不会更改组件中变量 value
的值。
在Ember中,DOM仅在组件中的变量值发生变化时才会更新。在my-component.js
中,变量value
的值没有变化。它只包含字符串文字 initial value
.
例如,this.set('value', Math.random());
这将随着变量 value
的值变化而起作用。
Why can I update value with a string literal but not with this.get('initial_value')?
It can be done only once as the value changes only 1 time. (While changing the value to string during first time)
实现你的案例,
您可以使用 {{input value=value}}
实现双向绑定。编辑输入框时,变量 value
的值发生变化。
在focusing out时,this.set('value',this.get('initial_value'))
会根据需要设置初始值。
我似乎对 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')
更新?
我尝试了这段代码,为组件生命周期中的每个函数换出 init
。我这样做是因为我认为它与渲染有关;有点像。
这里是 twiddle.
您可以只在 my-component.hbs 文件中包含 {{input value=value}}
,当您更改输入时,它将调用输入助手中的 change
函数,该函数将调用 change
函数您的组件将其重置为 initial_value
.
既然你用过,<input type="text" value={{value}}>
,它的单向绑定。即,在组件中更改 value
时,更改将反映在输入框中,但更改输入框中的值不会更改组件中变量 value
的值。
在Ember中,DOM仅在组件中的变量值发生变化时才会更新。在my-component.js
中,变量value
的值没有变化。它只包含字符串文字 initial value
.
例如,this.set('value', Math.random());
这将随着变量 value
的值变化而起作用。
Why can I update value with a string literal but not with this.get('initial_value')?
It can be done only once as the value changes only 1 time. (While changing the value to string during first time)
实现你的案例,
您可以使用 {{input value=value}}
实现双向绑定。编辑输入框时,变量 value
的值发生变化。
在focusing out时,this.set('value',this.get('initial_value'))
会根据需要设置初始值。