4

我有以下 JSbin,我正在尝试使用 ember-data 创建一个基本的订购系统。

http://jsbin.com/ibazom/4(在 Darshan 发表第一条评论后更新)

每个订单都需要绑定到一个客户,我知道我需要填充属性 (eligibleCustomers) 以绑定到 Ember.Select,但我不太清楚在哪里做。

然后我需要更新订单/新模板

{{view Ember.Select
  contentBinding="eligibleCustomers"
  optionLabelPath="content.name"
  optionValuePath="content.id"
}}

我在去 /orders 时也遇到了我无法弄清楚的错误

TypeError: Cannot read property 'length' of null 

更新:App.Order.FIXTURES =[];修复了上述错误。

来自http://discuss.emberjs.com/t/proper-way-to-populate-ember-select/1611的交叉帖子

4

1 回答 1

2

您可以使用needs来声明您OrdersNewController需要customers控制器。此外,创建一个属性以帮助轻松绑定该控制器。

App.OrdersNewController = Ember.ObjectController.extend({
  needs: ['customers'],
  eligibleCustomers: function() {
    return this.get('controllers.customers');
  }.property(),
});

在对应的Ember.Select你需要绑定一个属性就好selectedCustomer让你在保存记录的时候使用。

{{view Ember.Select
  contentBinding="eligibleCustomers"
  valueBinding='selectedCustomer'
  optionLabelPath="content.name"
  optionValuePath="content.id"
}}

为了OrderNewController工作,你必须给它一个新的订单对象,setupController以便description和其他属性对应于它的模型,因为它是ObjectController

App.OrdersNewRoute = Ember.Route.extend({
  setupController: function(controller) {
    controller.set('model', App.Order.createRecord({}));
  }
});

最后在createUser方法中,transitionTo不推荐使用。你想transitionToRoute改用。

createUser: function() {
  var model = this.get('model');
  var selectedCustomer = this.get('selectedCustomer');
  var customer = App.Customer.find(selectedCustomer);
  model.set('customer', customer);
  model.set('dateOfOrder', new Date());
  model.save();

  this.transitionToRoute('orders');
}

这是更新的jsbin

于 2013-06-27T16:46:55.607 回答