Найти элемент в Ember ArrayController

Как правильно найти элемент в Ember.js ArrayController? У меня есть набор контактов в контроллере:

App.contactsController = Em.ArrayController.create({
    content:[],
});

В контроллере есть объекты, они отображаются и все работает нормально. Затем я хочу реализовать маршрутизатор с сериализацией/десериализацией:

...
deserialize:function (router, params) {
    var contact = App.contactsController.find(function(item) {
        return item.id == params.contact_id;
    });
},
...

Однако функция поиска, по-видимому, не выполняет никаких итераций. Что может быть причиной? Возможно ли, что маршрутизатор пытается выполнить маршрутизацию до того, как приложение вызовет свой метод ready? Это место, где я заполняю контроллер данными.

РЕДАКТИРОВАТЬ: Ну, я обнаружил, что маршрутизатор пытается выполнить переход до того, как я заполню свой arrayController данными (в методе Ember.Application.ready). Можно ли «отложить» маршрутизацию после правильной установки данных?


person Pavel S.    schedule 15.08.2012    source источник


Ответы (3)


var contact = App.contactsController.filter(function(item) {
    return item.id == params.contact_id;
});

Я думаю, вы можете запустить Application.initialize(), когда маршрутизатор установлен. Вы можете использовать наблюдатель для обнаружения набора данных.

dataChanged: function() {
    console.log(this.get('content.length'));
    // before emberjs 1.0pre
    // console.log(this.getPath('content.length')); 
}.observes('content')
person Daniel King    schedule 16.08.2012

На самом деле проблема была вызвана вставкой данных в arrayController после того, как маршрутизатор выполнил десериализацию. Помещение его перед App.initialize() решило проблему.

person Pavel S.    schedule 16.08.2012

правильный ответ:

var contact = App.contactsController.content.find(function(item) {
    return item.id == params.contact_id;
});

Он не вернет элемент, если вы не укажете на массив содержимого.

person WallMobile    schedule 29.09.2012