Светильники Ember на модели не загружаются при запуске

У меня проблема с загрузкой данных Ember из конкретной модели. Прежде всего, я должен указать, что я использую require.js для загрузки всех зависимостей. Я загружаю все контроллеры, представления, маршруты, а затем добавляю их в свое глобальное приложение Ember. Более того, у меня есть простая модель с несколькими полями в качестве фикстур.

Итак, в первый раз что-то вроде App.MyModel.find().toArray().length отвечает мне 0. Но когда приложение запускается, если я пытаюсь запустить это предложение, я получаю правильное значение.

Я пытался вычислить любое событие или метод (в контроллере или маршруте), который в конце концов выполняется, но не понял. Я пытался установить controller.content на App.ready безуспешно.

Может ли кто-нибудь помочь мне, пожалуйста?


person Lt.    schedule 01.05.2013    source источник
comment
Я считаю, что length равно 0, потому что find возвращает обещание, и вы пытаетесь получить доступ к свойствам объекта, пока он не был материализован. Вы должны вызвать find в Route#model и установить содержимое контроллера в Route#setupController   -  person MilkyWayJoe    schedule 01.05.2013
comment
@MilkyWayJoe ваш комментарий - более чем приемлемый ответ, вы должны опубликовать его как ответ :)   -  person intuitivepixel    schedule 01.05.2013
comment
Да @MilkyWayJoe это именно то, что я делал, но не было успеха   -  person Lt.    schedule 01.05.2013
comment
Можете ли вы создать скрипку или добавить сюда свой код?   -  person MilkyWayJoe    schedule 01.05.2013
comment
Спасибо @MilkyWayJoe, я наконец нашел решение после долгих поисков в Google.   -  person Lt.    schedule 01.05.2013
comment
не знал, что вы используете модули   -  person MilkyWayJoe    schedule 01.05.2013


Ответы (1)


Решением в моем случае был «набор исправлений»:

  1. Мне пришлось разделить объект приложения Ember, чтобы сначала установить экземпляр DS.Store и добавить к нему "Модели"
  2. Во второй части этого объекта я добавил все контроллеры, представления, маршрутизатор и т. д.
  3. Наконец, когда я расширил объект DS.Store, мне пришлось установить атрибут simulateRemoteResponse: true

Окончательный код app.js был следующим:

define(
    [ #dependencies ],

    function( #dependencies_objects ) {

        window.App = Ember.Application.create({
            VERSION: '1.0.0',
            LOG_TRANSITIONS: true,

            rootElement: '#app',

            // Store
            store: DS.Store.create({
                revision: 12,
                adapter : DS.FixtureAdapter.extend({
                    simulateRemoteResponse: false
                })
            }),

            // Models
            Item: Item  // Where Item is my own model
        });

        App.reopen({
            // Routes
            IndexRoute: IndexRoute,

            // Load routes
            Router: Router,

            // Controllers
            ApplicationController: Ember.Controller.extend(),
            IndexController: IndexController
        });

    }
);
person Lt.    schedule 01.05.2013