2013-10-25 4 views
0

Я пытаюсь узнать, как создать форму, которая опирается на несколько моделей.ember.js, вытаскивающий из нескольких магазинов моделей в одном шаблоне

Например, Person форма, пользователь может указать свое имя, город, какие Company (отдельные модели) они принадлежат, какие Group s (отдельные модели), они в то, что Car (отдельные модели) они ведут и т. д. Я не могу найти документацию о том, как это можно достичь.

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

Как я могу это сделать?

ответ

1

Существует несколько способов сделать это.

(1) Добавьте объект к вашему контроллеру, который возвращает необходимые записи для вашего раскрывающегося списка.

http://emberjs.jsbin.com/AqimiFI/4/edit

setupController: function(controller, model) { 
    this._super(controller, model); 

    // set an empty array 
    controller.set('states', []); 

    this.get('store').find('state').then(function(states){ 
    //once the states are resolved set the states to the records 
    controller.set('states', states); 
    }); 
    } 

(2) В какой-то момент в приложении (там, где это представляется целесообразным) в один из ваших маршрутов создать контроллер для элементов в вопрос и установить модель этого контроллера к элементам , затем используйте нужды. Я предпочитаю этот метод, потому что вы можете использовать этот контроллер по всему приложению добавить логику к нему и он совместно и т.д ...

http://emberjs.jsbin.com/AqimiFI/5/edit

setupController: function(controller, model) { 
    this._super(controller, model); 

    var states = this.controllerFor('states'); 
    states.set('model', this.get('store').find('state')); 
} 

App.ApplicationController = Ember.ArrayController.extend({ 
    needs:['states'], 

    states:function(){ 
    return this.get('controllers.states'); 
    }.property('controllers.states') 
}); 

В этом примере я создал контроллер состояний в маршрут приложения. Это не привязывает его к контроллеру/маршруту приложения вообще, это был просто крючок на ранней стадии, что я мог бы использовать для создания контроллера для хранения данных.

Для доступа к контроллеру с другого контроллера вы должны указать, что он вам нужен (требуется: ['states']).

Свойство состояний возвращает контроллер состояний (важно помнить, что контроллер массива и контроллеры в целом в ember - только декораторы на своих моделях). Ember будет проксировать все вызовы get/set до модели (если они не существуют на контроллере). Поэтому, когда я возвращаю контроллер состояний, вы можете думать об этом как о возвращении модели, которая представляет собой массив состояний.

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

+0

ничего себе ... это сбивает с толку. Позвольте мне попытаться перевести то, что, по моему мнению, происходит. В 'ApplicationRoute', указывая модель для' StatesController', вы говорите, что вам нужен 'StatesController' в' ApplicationController'. Свойство 'states' в' ApplicationController' возвращает модель из 'StatesController' из' this.get ('controllers.states') '? Если это правильно, вы могли бы определить модель для 'StatesController' непосредственно в' StatesController', а не в 'ApplicationRoute'? – David

+0

ХА, возможно, это было немного менее запутанно, если я использовал более одного контроллера, позвольте мне посмотреть, могу ли я сломать ваше заявление. – Kingpin2k

+0

ха-ха спасибо!что было бы невероятно полезно – David

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