javascript - ember Controller getProperties 返回 "undefined"

标签 javascript ember.js

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

设置.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(路由)

import Ember from 'ember';

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

});

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

最佳答案

我猜问题是您的 Controller 没有您期望的属性。从你的 Controller 的代码我看到没有。设置 Controller 只定义了一个操作处理程序 (saveSettings()),没有其他任何内容。表单正确填充了数据,因为它是模型数据(即 {{input .... value=model.email}}),而不是 Controller 数据。

我不会描述如何使用 Controller 属性,因为我敢打赌您想要做的是更新您的用户。它是双向绑定(bind),因此不需要显式的属性修改。我认为这段代码应该可以完成工作:

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();
    }
  }

});

关于javascript - ember Controller getProperties 返回 "undefined",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36373338/

相关文章:

javascript - 从 iframe 中的纯 JavaScript 调用 Ember 操作

javascript - 检查 DOM 节点是否在 Iframe 中

javascript - 如何在加载时显示隐藏表单

javascript - 在文本组件中显示请求结果时发生错误。使用 fetch() 方法

javascript - Ember 未捕获类型错误 : Cannot read property 'yield' of undefined

javascript - 无法在 ember js 中从 servlet 渲染 json 数组

javascript - 如何对动态生成的文本框进行验证?

javascript - 是否可以从浏览器在 amazon s3 上上传流?

ember.js - 如何将 ember cli 与 Visual Studio 结合使用

javascript - 构建必须在 Ember 中自行删除的组件列表