Ember无法保留下拉值

问题描述:

我正在使用Ember 2.5.0。在我的应用程序中,我使用ember-select-list插件创建了一个包含下拉列表的页面。Ember无法保留下拉值

我可以呈现下拉菜单,但无法保留下拉列表的值。每当我选择的价值,我得到的铬控制台以下异常:

断言失败:不能叫有“身份证”得到一个未定义的对象上

请找到下面的代码,参考:

模板:

{{select-list content=roles 
       optionValuePath="role" 
       optionLabelPath="role" 
       value=role 
       action=(action (mut role))}} 

个Route.js

export default Ember.Route.extend({ 
    model(){ 
     return Ember.RSVP.hash({ 
     books : this.store.findAll("book"), 
     roles : this.store.findAll("role") 
    }); 
}, 
setupController(controller,model){ 
    controller.set('users',model.books); 
    controller.set('roles',model.roles); 
} 
}); 

模型

export default DS.Model.extend({ 
    role:DS.attr() 
}); 

在路由器,当我通过Array(roles: this.store.findAll("role").toArray())代替model,我可以保留值,但同时使模型它引发错误。

任何人,你能帮我解决这个问题吗?

ember-select-list documentationunit test表明了array需要在{{select-list}}帮手content财产。

这就是为什么Ember.RSVP.hash似乎失败,因为hash预期,并返回一个object,这是烬选名单未配置为使用类型。

而不是hash,你应该使用Ember.RSVP.all,作为all预期,并返回一个array,这应该工作。

我创建了一个Ember Twiddle example来演示。

如果你不想使用烬,选择列表中,你可能会发现它更容易使用仅仅以Ember's each helper构建自己的选择列表,像这样:

<select onchange={{action "selectRole" value="target.value"}}> 
    {{#each roles as |role| }} 
    <option value="{{ role }}" label={{ role }}> 
     {{ role }} 
    </option> 
    {{/each}} 
</select> 
+0

但是这里面RSVP.hash我有一个2Models是书模型,另一个是我的角色只需要角色是一个数组而不是book.Also还有其他简单的方法来构建一个选择下拉式我不知道为什么ember对于基本的HTML表单元素来说非常困难。 – VelNaga

+0

您可以很容易地添加“书籍”。我已经用注释更新了Twiddle示例。另外,我已经更新了答案,以包含一个本地的Ember方法来使用'each'助手构建一个'

+0

如果使用后一种方法,您可以继续使用'Ember.RSVP.hash'。 – jacefarm

我会建议你使用ember-power-select加上。

你的问题,你可以试试这个,

setupController(controller,model){ 
    controller.set('users',model.books); 
    controller.set('roles',model.roles.toArray()); 
} 

让我知道这是行不通的

+0

通过添加'then'将不再是一个PromiseArray,它将无法工作。 – locks

+0

删除然后部分和简化到阵列在setupcontroller – kumkanillam