2014-11-22 3 views
0

Я пытаюсь установить свойство на вход, привязанный к модели, но я не знаю, как добраться до этого единственного элемента. Вот мое действие контроллера:Ember.js, работающий с одним членом дочернего элемента, перечисляемым

acceptEdit: function(item) { 
    items = this.get('items') 
    items.toArray().forEach(function(item){ 
    item.set('isEditing', false); 
    }); 
    items.save(); 
} 

Элементы принадлежат к категории. Вот Категория модель:

App.Category = DS.Model.extend({ 
    title: DS.attr('string'), 
    items: DS.hasMany('item'), 
    itemCount: function() { 
    return this.get('items.length'); 
    }.property('[email protected]') 
}); 

Так что, когда acceptEdit называется я могу получить все пункты для категории для текущего маршрута, но я не могу понять, как получить на точный пункт редактируется. Таким образом, мой неэлегантный код, который просто перебирает все элементы, чтобы установить «isEditing» на false. Clobbering работает, но не идеален: \

Есть ли способ получить отдельный товар?

ответ

3

У вас действительно есть только два варианта: поиск по массиву или сохранение того, который в настоящее время редактируется. Если вы не хотите хранить редактируемый, просто используйте метод findBy для получения объекта, который редактируется.

var items = this.get('items'); 
var editingItem = items.findBy('isEditing', true); 
// I use tryInvoke in case one isn't found. That might not be possible for you. 
Ember.tryInvoke(editingItem, 'set', ['isEditing', false]); 
+0

Я отметил это как решение, но у меня есть желание спросить. Является ли это более эффективным, чем просто сближение? Причина, по которой я говорю, что это потому, что для целей этого приложения, я согласен с тем, что у всех атрибутов свойство isEditing установлено значение false. – jasongonzales

+1

Да, это немного более эффективно. Изменяя все, вы запускаете каждого наблюдателя для каждого элемента массива. Изменяя только один, вы только стреляете в одного набора наблюдателей. В зависимости от того, как вы используете элементы, это может иметь огромное значение или вообще ничего. – GJK

+0

Отличное объяснение. Я так и не думал об этом. – jasongonzales

Смежные вопросы