gpt4 book ai didi

ember.js - EmberJS计算的排序属性与jQuery UI Sortable冲突

转载 作者:行者123 更新时间:2023-12-02 05:59:39 25 4
gpt4 key购买 nike

我在使用EmberJS进行拖放排序功能时遇到问题。

涵盖此问题的教程在初始排序方面没有提供任何帮助,我正在通过计算属性来完成此工作。

我遇到的似乎是在sortedItems计算属性更改时, Ember 的重新渲染与jQueryUI Sortable更新DOM之间的竞争条件。列表项被重复,或在排序时完全消失。

路线

import Ember from 'ember';

export default Ember.Route.extend({
model: function() {
return Ember.Object.create({
id: 1,
title: "Title",
subtitle: "Subtitle",
items: [
Ember.Object.create({
name: "Item 2",
sortOrder: 2,
id: 1
}),
Ember.Object.create({
name: "Item 1",
sortOrder: 1,
id: 2
}),
Ember.Object.create({
name: "Item 3",
sortOrder: 3,
id: 3
})
]
});
}
});

控制者
import Ember from 'ember';

export default Ember.ObjectController.extend({

sortProperties: [ 'sortOrder' ],
sortedItems: Ember.computed.sort('model.items', 'sortProperties'),

actions: {
updateSortOrder: function(indexes) {
this.get('items').forEach(function(item) {
var index = indexes[item.get('id')];
item.set('sortOrder', index);
});
}
}

});

View
import Ember from 'ember';

export default Ember.View.extend({

didInsertElement: function() {
var controller = this.get('controller');

this.$(".item-list").sortable({
update: function(event, ui) {
var indexes = {};

$(this).find('li').each(function(index) {
indexes[$(this).data('id')] = index;
});

controller.send('updateSortOrder', indexes);
}
})
}
});

模板
<h1>{{ title }}</h1>
<h2>{{ subtitle }}</h2>

<ul class="item-list">
{{#each item in sortedItems }}
<li data-id="{{ unbound item.id }}">
name: {{ item.name }}<br />
sortOrder: {{ item.sortOrder }}<br />
id: {{ item.id }}
</li>
{{/each}}
</ul>

这是一个重现此问题的准系统Ember应用程序: https://github.com/silasjmatson/test-sortable



有没有一种方法可以避免这种竞争情况,或者在 Controller 初始化时仅排序一次?

抱歉,如果互连网上已经有答案。尽管经过一周的搜索/实验,我仍无法解决此问题。

最佳答案

初始化 Controller 后,您只能排序一次:

sortedItems: Ember.computed(function() {
return Ember.get(this, 'model.items').sortBy('sortOrder');
})

因为您使用的是计算的sort属性,所以只要对任何项目的sortOrder属性进行更改,它都会尝试为您对列表进行排序,这将重新呈现#each并进行一些时髦的操作。

最初只需使用上述方法进行一次排序,然后让jQuery处理项目的顺序-而不是jQuery和Ember。

关于ember.js - EmberJS计算的排序属性与jQuery UI Sortable冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29219422/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com