2013-06-26 3 views
4

У меня есть следующий JSbin, в котором я пытаюсь создать базовую систему заказов, используя данные ember-data.Правильный способ заполнения Ember.Select

http://jsbin.com/ibazom/4 (обновление после первых замечаний Даршан в)

Каждый заказ должен быть привязан к клиенту, и я знаю, что нужно заполнить свойство (eligibleCustomers) связываться с Ember.Select, но я не не знаю, где это сделать.

Тогда мне нужно обновить заказы/новый шаблон с

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

Я также получаю сообщение об ошибке при переходе к/заказов, которые я не могу понять,

TypeError: Cannot read property 'length' of null 

Update: App.Order.FIXTURES =[]; исправлена ​​ошибка выше.

крест сообщения от http://discuss.emberjs.com/t/proper-way-to-populate-ember-select/1611

+1

Попробуйте использовать не-уменьшенные библиотеки в развитии. Он показывает, что вам нужно определить 'Order.FIXTURES'. Это избавит вас от нулевой ошибки. Остальная часть вопроса неясна для меня, не могла найти «подходящих клиентов» в источнике. –

+0

Мое намерение состояло в том, чтобы связать 'eligibileCustomers' с Ember.Select, но у меня нет ничего реализованного, потому что я не уверен, куда он должен идти. Первоначально я просто думал, что это дополнительное свойство на моем «OrdersNewController», но я думаю, что это неправильно. Сейчас все клиенты являются «подходящими клиентами», но в какой-то момент мне может понадобиться подмножество. – RyanHirsch

ответ

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

+1

Почему это, если я ударил '#/orders/new' напрямую, клиенты для Select не загружены? Должна ли спецификация 'needs' обрабатывать надлежащую загрузку этого ресурса? – RyanHirsch

+0

Да, я этого не учитывал, для этого сценария вам нужен такой же «образцовый» крючок. –