2013-09-26 2 views
2

Как разрешить асинхронные отношения hasMany в Ember.Route?Ember.js: Как разрешить асинхронные отношения hasMany в Ember.Route?

Конкретно: я не могу понять, почему this.modelFor('collection').get('id') возвращает идентификатор, но this.modelFor('collection').get('recipes_refs') объект (может быть, обещание?).

Я должен решить recipes_refs, потому что мне нужно выяснить, есть ли в настоящее время коллекция рецептов содержит запрошенный в настоящее время рецепт.

// Route 
App.CollectionRecipeRoute = Ember.Route.extend({ 
    model: function() { 
     console.log(this.modelFor('collection').get('id')) 
    } 
}); 

// Models 
App.Collection = DS.Model.extend({ 
    title: DS.attr('string'), 
    assets: DS.attr(), 
    status: DS.attr('string'), 
    recipes_refs: DS.hasMany('recipe', { async: true }) 
}); 

App.Recipe = DS.Model.extend({ 
    title: DS.attr('string'), 
    ingredients: DS.attr('string') 
}); 

ответ

3

Вы правы, что this.modelFor('collection').get('recipes_refs') возвращает обещание. Вы можете справиться с этим, как и любые другие обещания, используя then для обработки случаев, когда он разрешает или отклоняет.

this.modelFor('collection').get('recipes_refs').then(function(recipes){ 
    // At this point 'recipes' is a collection of live objects 
    recipes.forEach(function(recipe,i){ 
    // do something with each recipe in the collection 
    }); 
}); 
+0

Благодарим вас за внимание! – gearsdigital

+0

Не могли бы вы объяснить, почему 'recipes' (в вашем случае' i') здесь не массив? – gearsdigital

+2

'recipes' - Перечислимый, который очень похож на массив. Вы можете прочитать об этом здесь: http://emberjs.com/guides/enumerables/. В 'function', переданном' forEach', у меня были аргументы, помеченные в обратном порядке. Я исправил это сейчас. –

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