使用Ember.js和jQuery.ui的可排序列表

Ale*_*ber 10 jquery-ui ember.js

我正在努力使用jQuery.ui将Ember.js创建的列表排序.

控制器看起来像这样:

App.ThingyController = Ember.ArrayController.create
  content: [
    { name: 'Item1' },
    { name: 'Item2' }
  ]
Run Code Online (Sandbox Code Playgroud)

和这样的模板:

<script type="text/x-handlebars">
  {{#collection contentBinding="App.ThingyController" tagName="ul" id="sortable"}}
    {{content.name}}
  {{/collection}}
</script>
Run Code Online (Sandbox Code Playgroud)

我的问题是:

  • 我最好在ul"#sortable"上调用sortable()函数?控制器上是否有事件以及我可以使用的呈现HTML元素的句柄?

  • 如何将jQuery.ui回调连接到Ember.js控制器?比如说,通过ajax将更新的列表发送到服务器?

所有这一切都可以绕过Ember.js抽象,但我想以"正确的方式"来做.

或者整个概念是否有缺陷,Ember.js提供了一个没有jQuery.ui的"可排序"功能?

Mic*_*ert 6

您可以实现Em.View#didInsertElement [1],您可以确保创建dom元素并将其插入到正文中.这将是你调用$ .sortable的地方:

App.MySortableView = Em.CollectionView.extend({
  tagName: "ul",
  didInsertElement: function() {
    this.$().sortable()
  }
})
Run Code Online (Sandbox Code Playgroud)

模板:

{{#collection "App.MySortableView" ...}}
  ...
{{/collection}}
Run Code Online (Sandbox Code Playgroud)

(我没有尝试这个代码,但我不明白为什么它不应该工作......)

[1] https://github.com/emberjs/ember.js/blob/master/packages/ember-views/lib/views/view.js#L738