Сортируемый список с использованием Ember.js и jQuery.ui

Я пытаюсь получить список, созданный с помощью 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>

Мои вопросы:

  • Где лучше всего называть функцию sortable() на ul "#sortable"? Есть ли событие на контроллере и дескриптор отображаемого HTML-элемента, который я могу использовать?

  • Как подключить обратные вызовы jQuery.ui к контроллеру Ember.js? Как, скажем, отправить обновленный список на сервер через ajax?

Все это можно сделать, обойдя абстракцию Ember.js, но я хочу сделать это "правильным путем".

Или вся концепция ошибочна, и Ember.js обеспечивает "сортируемую" функцию без jQuery.ui?

Ответ 1

возможно, вы могли бы реализовать 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

Ответ 2

Вам нужно заставить Ember выполнять сортировку, используя свой собственный сортируемый mixin и некоторый атрибут для каждого элемента. Когда вы вызываете свой начальный файл didInsertElement в родительском элементе, присоединяете функцию триггера события обновления к каждому из элементов и вызываете его сортировку ( "отменить" ) после записи полного порядка (до отмены), затем вы обновляете каждую из атрибуты элементов.

Вот учебник по этому самому процессу:

http://nerdyworm.com/blog/2013/04/26/ember-dot-js-drag-and-drop-sorting-with-jquery-sortable/

Ответ 3

Я видел прошлые примеры - вы меняете порядок сортировки содержимого в списке ember. Вы можете использовать те же функции сортировки, что и embererables ember.