好的伙计们,这真的开始让我感动。我假设我做了一些愚蠢或缺少某些事情,但我似乎无法获得一个选择列表来将所选值绑定到该对象。我试图做的就是创建一些级联下拉列表,就像你在汽车交易者这样的网站上看到的那样。
App.CarController = Ember.ObjectController.extend({
selectedCarMake: null,
availableCarMakes: Em.computed(function () {
return this.store.find("carMake"); // => GET /carMake
}).cacheable(),
availableCarModels: Em.computed(function () {
var make = this.get('selectedCarMake');
// the line below returns the id and not an object
console.log(make);
if (make === undefined || make === null)
return [];
return make.get('carModels');
}).property('selectedCarMake'),
});
这些是我的模特
App.CarMake= DS.Model.extend({
name: DS.attr('string'),
carModels: DS.hasMany('carModel', { async: true })
});
App.CarModel= DS.Model.extend({
name: DS.attr('string')
});
这是我的html标记
<td>
{{view Ember.Select
contentBinding="availableCarMakes"
optionLabelPath="content.name"
optionValuePath="content.id"
valueBinding="selectedCarMake"
prompt="Please Select..."
}}
</td>
所以第一个下拉列表(如上所示)会填充,但是当你选择一个值并调用availableModels来绑定第二个下拉列表时,它就会爆炸,因为selectedCarMake是一个id而不是一个对象。任何指针都会非常感激!
答案 0 :(得分:3)
正如您所说,如果您将用户的选择绑定到对象,请使用selection=selectedCarMake
代替valueBinding='selectedCarMake'
。值只是将每个<option>
(不是绑定到Ember选项的整个对象)的值绑定到您指定的任何属性。有关详细信息,请参阅Em.Select docs。