Я думаю, что самое важное, что вам нужно сделать, - это в первую очередь сделать так много логики, как вы можете от взглядов и до контроллеров.
Другое, что было бы полезно в вашем случае, состоит в том, чтобы иметь itemController
для каждого продукта в списке. Таким образом, вы можете обрабатывать специфическую для элемента логику в этом контроллере элемента.
У меня недостаточно информации для понимания вашей архитектуры, поэтому я сделаю несколько предположений.
Учитывая у вас есть следующие ProductsController
:
App.ProductsController = Ember.ArrayController.extend();
Вам нужно создать ProductController
, который будет создан, чтобы обернуть каждый продукт сам по себе.
App.ProductController = Ember.ObjectController.extend();
Вам нужно изменить шаблон следующим образом:
{{#each controller itemController="product"}}
<li>name</li>
{{/each}}
Теперь каждый продукт в вашем списке будет иметь свой собственный ProductController
, который может обрабатывать события один продукт и будет действовать в качестве контекста для каждого списка пункт.
Другой вариант:
Если вы будете заниматься только один продукт, в то время, вы можете использовать маршруты, чтобы описать, какой продукт вы работаете с:
App.Router.map(function() {
this.resource('products', { path: '/products' }, function() {
this.resource('product', { path: '/:product_id' }, function() {
this.route('edit');
});
});
});
И создать контроллер для редактирования продукт:
App.ProductEditController = Ember.ObjectController.extend();
И список ваших пунктов будет ссылка на этот продукт маршрут:
{{#each controller}}
<li>{{#linkTo "product.edit" this}}name{{/linkTo}}</li>
{{/each}}
вы сэр блестящие! Первое решение работало, я не знал о itemController в каждом. Любая идея, как я получаю содержимое Ember.Select contentBinding, чтобы вытащить контент из функции, определенной на ProductController? –
Я не уверен, что вы имеете в виду, Ember.Select находится внутри '{{#each}}'? Обычно вы хотели бы сделать эту функцию вычисленным свойством 'list: function() {return this.get ('categories'); } .property ('categories') ', а затем' contentBinding = 'list'' –