繁体   English   中英

在组件中灰烬此设置

[英]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

我尝试了这段代码,将组件生命周期中的每个函数initinit 我这样做是因为我认为它与渲染有关。 还是那样。

这是玩笑

既然您已经使用<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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM