2012-01-24 5 views
10

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

Мои вопросы:

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

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

Все это можно сделать в обход аббревиатуры Ember.js, но я хочу сделать это «правильным путем».

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

ответ

6

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

+0

Спасибо, это то, что я искал. Результат: http://jsfiddle.net/GtWKY/ – MoMolog

+1

Если это работает для вас, обязательно примите его ответ. – MattK

0

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

+0

Я вижу, но как это позволяет для перетаскивания и падение сортируемого функциональности, как это предусмотрено Сортируемый jquery.ui (в)? – MoMolog

+0

Извините - не знал, что вам также нужно перетащить. Это всего лишь предположение, но я бы позволил ember обрабатывать отображение и сортировку, но когда происходит перетаскивание, я буду использовать jquery для изменения порядка содержимого в событии drop. Затем пусть ember сделает дисплей. – MattK

+0

Правильно, это именно то, что я пытаюсь. Я просто не знаю, как. – MoMolog

1

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

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

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

Смежные вопросы