0

我以编程方式将一个对象(使用 pushObject)推送到一个可排序的列表中。我的问题是,如果我尝试$(selector).sortable('refresh')$(selector).sortable('serialize')序列化不包含最近添加的 dom 项。我可以 console.log($(selector)) 并且它似乎知道 dom 项目已被添加。

我最初的想法是在 pushObject 完成后有一个事件要注意吗?还是回调?

4

1 回答 1

2

pushObject 上是否有要注意的事件?

最简单的方法是添加一个观察者,当列表长度改变时触发。但在这种情况下,这可能还不够。

听起来这是一个时间问题。如果您尝试在 pushObject 之后(甚至在观察者中)立即调用 refresh ,则刷新代码将在 dom 更新之前运行。

诀窍是确保$(selector).sortable('refresh')在将新元素写入 dom 之后调用。这可能来自dom项目视图上的didInsertElement钩子或来自观察者,但正如@Luke在评论中提醒我的那样,最好的方法是安排刷新在渲染完成后运行。就像是:

Em.run.schedule('afterRender', this, this.refreshSortable)
于 2013-05-25T02:22:05.570 回答