2013-11-19 4 views
1

Я хочу сортировать ArrayController с помощью свойства, определенного/вычисленного в itemController. См. Это JSBin. Если вы сортируете по первому имени (определенному в модели), оно работает нормально, но если вы сортируете по lastName (определенному в itemController), это не сработает. Обязательно играйте с sortAscending: true или false. Любая идея, как сделать эту работу?Ember ArrayController нельзя сортировать по свойству, определенному в itemController

Вот еще один простой JSBin, который проявляет то же поведение (первый JSBin ближе к моему фактическому коду).

ответ

1

Сортируемый mixin применяется к контенту, а не к контроллерам содержимого.

Код: https://github.com/emberjs/ember.js/blob/v1.1.2/packages/ember-runtime/lib/mixins/sortable.js#L72

Вы, вероятно, хотите добавить любую логику вы добавляете на контроллерах к моделям.

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

Важно отметить, что определение свойства на модели не означает, что вам нужно получить его с сервера и не сохранять на сервере.

App.User = DS.Model.extend({ 
    name : DS.attr(), // this will be saved to the server 
    something: 31  // this isn't a DS attr, it isn't going anywhere 
}); 

В качестве примечания, я раньше лгал о чем-то.

Вы можете поговорить с дочерними контроллерами от вашего родительского контроллера.

С внутренней стороны родительского контроллера вы можете получить доступ к дочерним контроллерам с помощью objectAt и выполнить итерацию над родительским контроллером.

В данном примере это контроллер родительского

console.log(this.objectAt(0)); 

    this.forEach(function(itemController){ 
    console.log(itemController); 
    }); 

http://emberjs.jsbin.com/AQijaGI/1/edit

+0

Причина, по которой свойство определяется в контроллере, а не модель, что свойство может быть модифицирована путем взаимодействия с пользователем. Как вы поступите в таком случае? – cwarny

+0

Да, полностью, http://jsbin.com/ubolEdo/11/edit – Kingpin2k

+0

Это правильная ссылка? Я чувствую, что ничего не отличается от моей ссылки – cwarny

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