我以编程方式将一个对象(使用 pushObject)推送到一个可排序的列表中。我的问题是,如果我尝试$(selector).sortable('refresh')
或$(selector).sortable('serialize')
序列化不包含最近添加的 dom 项。我可以 console.log($(selector)) 并且它似乎知道 dom 项目已被添加。
我最初的想法是在 pushObject 完成后有一个事件要注意吗?还是回调?
pushObject 上是否有要注意的事件?
最简单的方法是添加一个观察者,当列表长度改变时触发。但在这种情况下,这可能还不够。
听起来这是一个时间问题。如果您尝试在 pushObject 之后(甚至在观察者中)立即调用 refresh ,则刷新代码将在 dom 更新之前运行。
诀窍是确保$(selector).sortable('refresh')
在将新元素写入 dom 之后调用。这可能来自dom项目视图上的didInsertElement钩子或来自观察者,但正如@Luke在评论中提醒我的那样,最好的方法是安排刷新在渲染完成后运行。就像是:
Em.run.schedule('afterRender', this, this.refreshSortable)