Ember。选择绑定集为undefined

时间:2014-10-07 15:08:13

标签: ember.js

我的模板中有一个Ember.Select。这些选项是从我从服务器获取的内容中填充的。所有选项都很好。但是当我想显示所选值时,它会将属性设置为undefined。

模板:

{#with this as context}}
  {{#each}}
    <tr>
      <td>{{name}}</td>
      <td>{{view Ember.Select content=context.types optionValuePath='content.id' optionLabelPath='content.name' value=type}}</td>
    </tr>
  {{/each}}
{{/with}}

控制器:

types: function() {
    return this.store.find('myType');
}.property()

模型I循环:

DS.Model.extend({
  name: DS.attr(),
  type: DS.attr() // <= this is the selected type (id)
});

MyType模型:

DS.Model.extend({
    name: DS.attr()
});

此代码将呈现select元素中的所有选项。像这样:

<select>
  <option value="1">My first type</option>
  <option value="2">My second type</option>
</select>

以下我不明白的事情:

  • 当我检查我的数据(ember inspect add-on)时,属性类型设置为undefined。
  • 但是当我选择一个选项时,type属性设置为正确的id。
  • 当我删除value=type时,类型属性在检查数据时具有正确的值。

jsbin: http://emberjs.jsbin.com/cugetoxoyira/3/edit

2 个答案:

答案 0 :(得分:2)

你有两个问题:

  1. 您选择的内容受限于未实现的Ember-Data承诺(这本身就是一个奇怪的生物)。您可以通过ifFing在isFulfilled属性上绕过它。
  2. 这种模型的ID是字符串,而不是整数。
  3. 查看here了解修复程序。

    希望有所帮助。

答案 1 :(得分:1)

在控制器中使用模型承诺是反模式。 Route的模型和afterModel挂钩等到Promise被解决并完成。因此,当您的控制器和模板呈现时,所有来自商店和json API的数据都将被正确下载和设置。

“Ember Way”解决方案是在当前Route的setupController挂钩中设置两个模型,因此您不必在模板中使用hack。

http://emberjs.jsbin.com/cugetoxoyira/44/edit

App.IndexRoute = Ember.Route.extend({
  model: function() {
    return Ember.RSVP.hash({
      stuffs: this.store.find('stuff'),
      types: this.store.find('type')
    }); 
  },

  setupController: function(controller, model) {
    controller.set('types', model.types);        
    controller.set('model', model.stuffs); 
  }
});