我正在努力获取由Ember.js创建的列表,可以使用jQuery.ui进行排序.
控制器如下所示:
App.ThingyController = Ember.ArrayController.create content: [ { name: 'Item1' },{ name: 'Item2' } ]
和这样的模板:
<script type="text/x-handlebars"> {{#collection contentBinding="App.ThingyController" tagName="ul" id="sortable"}} {{content.name}} {{/collection}} </script>
我的问题是:
>我最好在ul“#sortable”上调用sortable()函数?控制器上有一个事件和可以使用的渲染HTML元素的句柄吗?
>如何将jQuery.ui回调连接到Ember.js控制器?比方说,通过ajax将更新的列表发送到服务器?
所有这一切都可以避免Ember.js的抽象,但我想做到这一点“正确的方式”.
或者是整个概念有缺陷,Ember.js提供了一个没有jQuery.ui的“可排序”功能?
解决方法
您可以实现Em.View#didInsertElement [1],您可以确定dom元素已创建并插入正文.这将是你称为$.sortable的地方:
App.MySortableView = Em.CollectionView.extend({ tagName: "ul",didInsertElement: function() { this.$().sortable() } })
模板:
{{#collection "App.MySortableView" ...}} ... {{/collection}}
(我没有尝试这个代码,但我不明白为什么它不应该工作…)
[1] https://github.com/emberjs/ember.js/blob/master/packages/ember-views/lib/views/view.js#L738