2013-07-23 2 views
0

посмотреть jsFiddleEmberJS - Фильтрация массива удаляет шаблон автоматического связывания

Перед применением фильтра к массиву автоматического связывания отлично работает. Но после добавления функции фильтрации в массив шаблон автоматически не обновляется.

Чтобы проверить это.

App.FieldRoute = Ember.Route.extend({ 
    setupController: function(controller, model) { 

     //scenario 1 
     //controller.set('model', App.Fields); 

     //scenario 2 
     controller.set('model', App.Fields.filter(function(item, index, enumerable) { 
     if(item.id === model.id) return true; 
    })); 
    } 
}); 

Run jsFiddle с сценарием 1 (комментарий сценария 2 и раскомментируйте сценарий 1), а затем нажмите кнопку «Пол», а затем нажмите кнопку, которая добавит элемент в массив «добавить», и он будет немедленно отражать в пользовательском интерфейсе.

Запустите jsFiddle снова со сценарием 2. Шаблон не будет обновляться автоматически.

ответ

0

Ваш сценарий 1 работает, когда вы устанавливаете App.Fields в контент, поскольку контент содержит ту же ссылку на память массива App.Fields. Следовательно, push или pop в массиве отражается на контенте. Но ваша операция фильтрации (в setupController) выполняется только один раз, когда вы ввели маршрут.

Вы можете иметь свою модель фильтрации в контроллере

controller.setProperties({'model': App.Fields, filteringModel: model}); 

, а затем фильтровать контент

App.FieldController = Em.ArrayController.extend({ 
    displayArray: function(){ 
     return this.get('content').filterProperty('id',this.get('filteringModel.id')); 
    }.property('[email protected]','filteringModel') 
}); 

Вот fiddle

+0

при переключении между «Пол» и «Семейное положение "значения не меняются. – user10

+0

Вычисленное свойство также должно наблюдать «filteringModel» ... http: //jsfiddle.net/dbERr/9/ – selvagsz

+0

@SelvaG работает. обновите свой ответ на эту скрипку. Я соглашусь с этим. – user10

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