I am using Ember with jQuery UI sortable and it works fine until I want to delete some item after sort. This questio is allready answerd on stackoverflow but that solution does not work for me. I am using Ember 2.6.
Component template
<ui id="department_roles">
<li data-id="" role_id="" class="ui-state-default role_droppable">
<span>
</span>
<button >Remove</button>
</li>
</ui>
Component, The sorting works fine and after delete action item is deleted from array but DOM is incorrect.
import Ember from 'ember';
export default Ember.Component.extend({
list: Ember.ArrayProxy.create({content: Ember.A()}),
init: function () {
this._super();
this.get('list').pushObject({
id: 1,
index: 1,
name: 'name1'
});
this.get('list').pushObject({
id: 2,
index: 2,
name: 'name2'
});
this.get('list').pushObject({
id: 3,
index: 3,
name: 'name3'
});
this.get('list').pushObject({
id: 4,
index: 4,
name: 'name4'
});
this.get('list').pushObject({
id: 5,
index: 6,
name: 'name5'
});
},
sortProps: ['index:asc'],
sortedList: Ember.computed.sort('list', 'sortProps'),
updateSortedOrder(indices) {
this.beginPropertyChanges();
let tracks = this.get('list').forEach((item) => {
var index = indices[Ember.get(item, 'id')];
if (Ember.get(item, 'index') !== index) {
Ember.set(item, 'index', index);
}
});
this.endPropertyChanges();
},
didRender: function () {
this._super();
var self = this;
Ember.$("#department_roles").sortable({
update: function () {
var indices = {};
Ember.$(this).children().each((index, item) => {
indices[Ember.$(item).data('id')] = index + 1;
});
self.updateSortedOrder(indices);
},
});
Ember.$('#department_roles').disableSelection();
},
actions: {
removeItem: function (itemId) {
var self = this,
deleteItem,
list = this.get('list');
this.$("#department_roles").sortable("destroy");
list.arrayContentWillChange();
list.forEach(function (item) {
if (item.id === itemId) {
deleteItem = item;
}
});
list.removeObject(deleteItem);
list.arrayContentDidChange();
Ember.$("#department_roles").sortable({
update: function () {
var indices2 = {};
Ember.$(this).children().each((index, item) => {
indices2[Ember.$(item).data('id')] = index + 1;
});
self.updateSortedOrder(indices2);
},
});
console.log(self.get('sortedList'));
}
}
});
Aucun commentaire:
Enregistrer un commentaire