2014-11-18 7 views
2

Я использую адаптер localstorage и emnber-data, и когда я уничтожаю запись, которая имеет отношение hasMany, я хочу также уничтожить все эти.Emberjs, ember-data, localstorage adapter, destroyRecord и все hasMany отношения

Вот модели:

App.Category = DS.Model.extend({ 
    title: DS.attr('string'), 
    items: DS.hasMany('item') 
}); 

App.Item = DS.Model.extend({ 
    name: DS.attr('string'), 
    category: DS.belongsTo('category') 
}); 

У меня есть действие под названием «destroyCategory», в котором я пытался несколько вещей, но, независимо от того, что я стараюсь я получаю только странность.

Я пробовал перебирать «детей», я пробовал просто уничтожить «родителя», но никто не работает так, как ожидалось. Я предполагаю, что я просто пропустил что-то основное, поэтому оцените помощь.

EDIT:

ОК, я попытался это:

deleteItem: function(user_cat) { 
this.store.find('category', user_cat.id).then(function(category) { 
    items = category.get('items'); 
    items.forEach(function(item, index, enumerable) { 
    item.destroyRecord(); 
    }); 
    category.destroyRecord(); 
}); 

И странность я получаю то, что он разрушает все, кроме одного "ребенка" запись ... Вата?

последнее обновление:

Это работает, но мне интересно, если есть лучше, более идиоматический подход:

deleteItem: function(selection) { 
this.store.find('category', selection.id).then(function(category) { 
    items = category.get('items'); 
    items.toArray().forEach(function(item, index, enumerable) { 
    item.destroyRecord(); 
    }); 
    category.destroyRecord(); 
}); 
} 
+0

Что ты пытаясь достичь? Я предполагаю, что у вас уже есть элементы, присутствующие в 'store', которые вы должны удалить из текущего' controller/model'? – tr3online

+0

Когда пользователь уничтожает родительскую категорию, все элементы в ней также должны быть уничтожены. – jasongonzales

+0

Они уже были сохранены в «магазине»? Т.е.: вы сделали «category.save()» или все они предварительно сохранены? – tr3online

ответ

1

Вы можете invoke('destroyRecord') по пунктам:

deleteItem: function(selection) { 
this.store.find('category', selection.id).then(category => { 
    let items = category.get('items'); 
    items.toArray().invoke('destroyRecord'); 
    category.destroyRecord(); 
}); 
}