让我们说在我的后端我有模型Dealer
和Car
,两者都与Ember中的ManyToMany
关系相关联。我可以在后端手动创建关系,然后在使用Ember视图显示关系时,我可以轻松地在其商品中显示Dealer X
Car 1
,Car 2
和Car 3
。此外,在显示Car
时,我可以显示包含Dealers
模型的所有Car
。
现在我需要添加一些编辑可能性,我的意思是,在我编辑Car
的示例中,我想选择Dealers
的{{1}}他的提议。 (我需要这种编辑的可能性只针对关系的一方 - 而不是两者,所以我可以接受我能够将Car
添加到Dealers
但不需要在相反的方向上这样做(这正是我的背景如何运作)
所以在Cars
我创建了App.CarController
和addDealerToCar
之类的操作,他们向后端发送了适当的查询,从而保存了关系。
问题是:如何制作一些字段,这将允许我选择deleteDealerFromCar
即。使用选择框或其他下拉列表,然后调用将发送到后端的操作?
答案 0 :(得分:2)
我最近通过使用复选框实现了在表单中添加多对多关系。这适用于我的用例,因为我只有两到六个经销商,您可以选择特定的汽车。如果你有更多,这可能不合适。
以下是我用于转换为您的方案的代码。我从这个问题的代码中获取灵感:Many to Many Relationships with Ember, ember-data and Rails
查看:
App.CarEditView = Ember.View.extend({
dealerCheckbox: Ember.Checkbox.extend({
init: function(){
this._super();
var self = this;
// start off with the checkboxes checked for any dealer that
// has this car already
this.get('car.dealers').forEach(function(dealer){
if(dealer.get('id') == self.get('dealer.id')){
self.set('checked', true);
}
});
},
checkedObserver: (function(){
var car = this.get('car');
if(this.get('checked'))
car.addDealerToCar(this.get('dealer'));
else
car.deleteDealerFromCar(this.get('dealer'));
}).observes('checked')
})
});
模板(这将是编辑汽车的表格的一部分):
<div class="control-group">
<label class="control-label">Required Signatures</label>
<div class="controls">
{{#each dealer in controller.allDealers}}
<label class="checkbox">
{{view view.dealerCheckbox
carBinding="controller.content"
dealerBinding="dealer"
}}
{{dealer.title}}
</label>
{{/each}}
</div>
</div>
您需要添加类似的内容才能使上述代码正常工作,以便您可以访问所有经销商的列表。
App.CarEditRoute = Ember.ObjectController.extend({
setupController: function(controller, model) {
this._super(controller, model);
controller.set('allDealers', App.Dealer.find());
}
});