ember controller getProperties返回“undefined”

时间:2016-04-02 12:37:54

标签: javascript ember.js

我在ember中遇到表单问题,this.getProperties内部控制器为所有属性返回undefined。这是我的代码:

settings.hbs:

<form {{action 'saveSettings' on='submit'}}>

<label for="email">Email</label>
<p>
{{input id='email' placeholder='Enter Email' value=model.email}}
</p>
<label for="name">Name</label>

<p>
{{input id='name' placeholder='Enter Name' value=model.name}}
</p>
<label for="surname">Surname</label>

<p>
{{input id='surname' placeholder='Enter Surname' value=model.surname}}
</p>
<label for="skype">Skype</label>

<p>
{{input id='skype' placeholder='Enter Skype' value=model.skype}}
</p>
<label for="phone">Phone</label>

<p>
{{input id='phone' placeholder='Enter Phone' value=model.phone}}
</p>
<label for="city">City</label>

<p>
{{input id='city' placeholder='Enter City' value=model.city}}
</p>

<label for="country">Country</label>

<p>
{{input id='country' placeholder='Enter Country' value=model.country}}
</p>

<button type="submit">Save Settings</button>
</form>

settings.js(controller)

    import Ember from 'ember';

export default Ember.Controller.extend({

  actions: {
    saveSettings() {

      let {
        email, name, surname, skype, phone, city, country
      } = this.getProperties('email', 'name', 'surname', 'skype',
        'phone',
        'city', 'country');

      var user = this.get('model');
      user.set('email', email);
      user.set(
        'name', name);
      user.set('surname', surname);
      user.set('skype',
        skype);
      user.set('phone', phone);
      user.set('city', city);
      user
        .set('country', country);

      user.save();
    }
  }

});

settings.js(route)

import Ember from 'ember';

export default Ember.Route.extend({
  model() {
    return this.store.find('user', 'me');
  }

});

加载页面时,所有输入都显示正确的值,但提交表单时,所有属性都为null。我在这里停留了几个小时,我不明白为什么它不起作用。

1 个答案:

答案 0 :(得分:1)

我想问题是你的控制器没有像你期望的那样的属性。从您的控制器代码我看到没有。 Settings控制器只定义了一个动作处理程序(saveSettings()),没有别的。表单正确填充数据,因为它是模型数据(即{{input .... value=model.email}}),而不是控制器数据。

我不会描述如何使用控制器属性,因为我打赌你想要做的是更新你的用户。它是双向绑定,因此不需要显式的属性修改。我认为这段代码应该做的工作:

export default Ember.Controller.extend({

  actions: {
    saveSettings() {
      var user = this.get('model');

      // here your user should already have updated values, no need to set them explicitly

      // update the user also on backend
      user.save();
    }
  }

});