У меня есть Ember.ArrayProxy
создан так:Ember массив: не наносить на `removeObject`
Em.ArrayProxy.createWithMixins(Em.Array, Em.MutableArray, Em.SortableMixin, {
content : Em.A(arr),
sortProperties : properties,
sortAscending : fn ? fn : void(0)
}).reopen({
isEmpty: function(){
return this.get('length') < 1;
}
});
связывания данных работает довольно хорошо, когда я использую pushObject
или sortBy
на массиве. Но у меня нет обновлений в html, когда я использую removeObject
в этом массиве. Как я могу это исправить?
Мои Ember:
DEBUG: -------------------------------
DEBUG: Ember : 1.7.1+pre.c1ec09ad
DEBUG: Ember Data : 1.0.0-beta.9
DEBUG: Handlebars : 1.3.0
DEBUG: jQuery : 2.0.3
DEBUG: -------------------------------
UPD:
я заметил, очень странное поведение при удалении объектов из списка:
Существует мой Simpified шаблон в templates/order/list.handlebars
:
<ul class="scrollable_list">
{{#each group in orders}}
<li class="group">
<div class="group_title">
Orders at {{format_date group.date f="DD.MM.YYYY"}}
<div class="label">{{group.count}}</div>
</div>
</li>
<ul>
{{#each order in group.orders}}
<li {{bind-attr class=':order order.is_mine order.is_claimed'}}>
{{#link-to 'orders.group.show' controller.group order}}
{{partial 'order/item'}}
{{/link-to}}
</li>
{{/each}}
</ul>
{{/each}}
</ul>
Объект orders
является ArrayProxy
из Ember.Object
. Массив создается this.create_sortable_array
. Каждый объект в массиве имеет такую структуру:
Em.Object.create({
date : date,
time : date.getTime(),
orders : this.create_orders_array()
})
недвижимость orders
является ArrayProxy
тоже. Каждый элемент имеет значение DS.Model
экземпляра.
Методы:
this.create_orders_array:
create_orders_array: function(){
return this.create_sortable_array([], ['id'], true, function(a, b){
a = Number(a);
b = Number(b);
return a > b ? 1 : -1
});
}
this.create_sortable_array:
create_sortable_array: function(arr, properties, desc, fn){
desc = (typeof desc == 'undefined' || desc == null) ? false : desc;
fn = fn || void(0);
return Em.ArrayProxy.createWithMixins(
Em.MutableArray,
Em.MutableEnumerable,
Em.SortableMixin, {
content : Em.A(arr),
sortProperties : properties,
sortAscending : fn ? fn : void(0)
}).reopen({
isEmpty: function(){ return this.get('length') < 1 }
});
}
Шаблон будет представлен в {{outlet orders}}
маршрутизатором:
App.OrdersRoute = App.AppRoute.extend({
renderTemplate: function(){
this._super()
this.render('order/list', into: 'orders', controller: 'orders')
this.render({'order/show', into: 'orders', outlet: 'main_view'})
this.render('order/smart_search', into: 'application', outlet: 'smart_search', controller: 'orders')
}
});
Спасибо за ваш пример. Я делаю то же самое с моим массивом. Похоже, что моя структура приложения каким-то образом влияет на поведение «ArrayProxy». –
Можете ли вы добавить шаблон? – Kingpin2k
Конечно. См. ** UPD **. –