2016-05-29 2 views
0

Код говорит тысячу слов; есть ли способ сделать то, что я пытаюсь здесь?Зацикливание через хэш-символ JS RSVP Ember?

Пользователи "Root" Route

Загрузка общих выбираемые опции на верхнем уровне для использования в суб-маршрутов, таких как index, show, edit, create, и т.д ...

-- /pods/users/route.js 

model() { 
    return RSVP.hash({ 
     userCategories: this.store.findAll('user-category'), 
     userSources: this.store.findAll('user-source'), 
     userGroups:  this.store.findAll('user-group'), 
    }); 
}, 

Пользователи «Создать» Маршрут

С подпунктом /create Я хочу перебрать уже загруженных вариантов выше и загружать их в шаблон, как именованные переменные:

-- /pods/users/create/route.js 

setupController(controller, model) { 

    let rootModel = this.modelFor('users'); 

    rootModel.forEach(function (model, name) { 
     set(controller, name, model); 
    }); <-- THIS IS THE BROKEN PART... 

    ... 

} 

Проблему

На петле .forEach я получаю Error while processing route: rootModel.forEach is not a function TypeError: rootModel.forEach is not a function

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

-- /pods/users/create/route.js 

setupController(controller, model) { 

    let rootModel = this.modelFor('users'); 

    set(controller, 'rootModel', rootModel); 

    ... 

} 
+0

Зачем вам нужно проходить через него? Теперь, когда вы определили свой крючок модели, вы можете получить доступ к данным в шаблоне, например: '{{#each model.userCategories as | category |}}' – Igor

+0

Я предполагаю, что это больше предпочтение читаемости, я бы предпочел для доступа к 'userCategories' без ведущей модели. Логически я знаю, что это не имеет никакого значения ни в одном случае, но для меня '{{#each userCategories as | userCategory |}}' просто кажется более чистым. – SamSebastian

ответ

4
Object.keys(rootModel).forEach(function(name) { 
    var model = rootModel[keyName]; 
    set(controller, name, model); 
    // ... 
}); 

или возможно вы просто не нужно RSVP.hash но RSVP.all, которые возвращают обещание, которое решает с массив содержит разрешенные значения?