2014-10-27 4 views
1

Ожидается ли такое поведение?Ember itemController получает рестальтирующую информацию, когда ArrayController переупорядочивает

App.PostsController = Ember.ArrayController.extend({ 
    itemController: 'post', 
    sortProperties: ['date'], 
    sortAscending: false 
}); 

App.PostController = Ember.ObjectController.extend({ 
    init: function() { 
    console.log('post controller init'); 
    this.set('propertyNotIncludedInModel', true); 
    } 
}); 

Скажем, у меня есть список сообщений, и я в строке редактирую одну из дат сообщения. PostsController изменит порядок в списке. Как только это произойдет, консоль войдет в журнал, в котором будет изменена дата, указанная init. Конечно, любой контроллер свойства (не модель свойства), больше нет (я имею в виду, это новый объект, поэтому любое свойство, которое не имеет причины быть там, не определено).

Вы можете видеть это в этом jsBin.

Это кажется ужасно неправильным. Я чувствую, что это нарушает любую аналогию с реальной жизнью. Если у меня есть куча объектов, сидящих на столе, и я хочу их переупорядочить, я не уничтожаю тот, который я хочу переместить, а затем воссоздаю. Что оправдывает Эмбер за это поведение, и как мне с ним справиться? Мне нужно установить свойства контроллера на объект, положение которого в массиве может измениться. Еще лучше, мне нужны представления и их компоненты, представленные этим объектом, чтобы сохранять и поддерживать свои собственные состояния и свойства, а также - в настоящее время didInsertElement вызывается на каждом представлении/компоненте под контроллером элемента, что еще больше перепутает. Как я могу убедиться, что свойства и подпункты, которые мне нужны, сохраняются при перемещении объекта?

ответ

1

Его до вас, как вы применяете изменения к состоянию. Если вы заказываете недвижимость, заказ изменится сразу после изменения свойства. Если вы хотите дождаться, когда что-то случится, прежде чем запускать переупорядочение, я бы использовал buffered proxy pattern.. В качестве примера я отредактировал ваш jsbin. http://jsbin.com/zopelu/1/

EDIT Я пропустил часть о том, что контроллер уничтожен и воссоздан. Я думаю, что ошибка была введена в 1.7 и почти fixed

+0

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

+0

Спасибо, хорошая находка по этому вопросу. Они говорят о некоторых других методах, но похоже, что это может быть одной и той же основной причиной. Я буду принимать ваш ответ завтра, если никто другой не найдет ничего более окончательного в то же время. – Andrew

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