1

假设在我的后端我有模型Dealer,并且Car两者都与ManyToManyEmber 中的关系相关联。我可以在后端手动创建关系,然后在使用 Ember 视图显示它时,我可以轻松地Dealer XCar 1Car 2Car 3报价中显示它。同样在显示时Car我可以显示所有Dealers包含Car模型的人。

现在我需要添加一些编辑可能性,例如,当我编辑时,Car我想选择在他的报价Dealers中有这个的人。Car(我只需要对关系的一侧进行这种编辑的可能性 - 不是两者,所以我可以接受我能够添加DealersCars不需要在相反的方向上这样做(这正是我的背景工作的方式)

因此,App.CarController我创建了一个类似addDealerToCarand的操作deleteDealerFromCar,它们向后端发送适当的查询以保存关系。

问题是:我怎样才能创建一些字段,这将允许我选择Dealerie。使用选择框或其他下拉菜单,然后调用将发送到后端的操作?

4

1 回答 1

2

我最近使用复选框实现了在表单中添加多对多关系。这适合我的用例,因为我只有两到六个经销商可供您为特定汽车选择。如果你有更多,这可能不合适。

这是我用来翻译到您的场景的代码。我从这个问题的代码中获得灵感:与 Ember、ember-data 和 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());
  }

});
于 2013-07-27T03:38:22.380 回答