2012-01-24 9 views
10

Sto lottando per ottenere una lista creata da Ember.js ordinabile utilizzando jQuery.ui.Elenco ordinabile utilizzando Ember.js e jQuery.ui

Il controller si presenta così:

App.ThingyController = Ember.ArrayController.create 
    content: [ 
    { name: 'Item1' }, 
    { name: 'Item2' } 
    ] 

e il modello come questo:

<script type="text/x-handlebars"> 
    {{#collection contentBinding="App.ThingyController" tagName="ul" id="sortable"}} 
    {{content.name}} 
    {{/collection}} 
</script> 

Le mie domande sono:

  • Dove posso meglio chiamare il ordinabile() funzione su ul "#sortable"? C'è un evento sul controller e un handle per l'elemento HTML reso che posso usare?

  • Come connettere i callback jQuery.ui al controller Ember.js? Come, per esempio, per inviare l'elenco aggiornato al server tramite ajax?

Tutto ciò può essere fatto aggirare l'astrazione Ember.js, ma voglio farlo nel modo giusto.

Oppure l'intero concetto è imperfetto e Ember.js fornisce una funzione "ordinabile" senza jQuery.ui?

risposta

6

potresti probabilmente implementare Em.View # didInsertElement [1] dove puoi essere sicuro che l'elemento dom è stato creato e inserito nel corpo. questo sarebbe dove si chiama $ .sortable:

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

il modello:

{{#collection "App.MySortableView" ...}} 
    ... 
{{/collection}} 

(non ho provato questo codice, ma io non vedo perché non dovrebbe funzionare ...)

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

+0

Grazie, questo era quello che stavo cercando. Il risultato finora: http://jsfiddle.net/GtWKY/ – MoMolog

+1

Se questo funziona per te, assicurati di accettare la sua risposta. – MattK

0

Ho visto esempi precedenti: si modifica l'ordinamento del contenuto nell'elenco di braciole. È possibile utilizzare le stesse funzioni di ordinamento fornite da enumerables ember.

+0

vedo, ma come fa questo consente una funzionalità ordinabile drag-and-drop come previsto dal ordinabili di jquery.ui()? – MoMolog

+0

Scusa - non sapevo che volevi anche trascinare e rilasciare. Questa è solo un'ipotesi, ma lascerei che ember gestisse il display e l'ordinamento, ma quando si esegue il drag and drop, userei jquery per riordinare il contenuto nell'evento drop. Quindi lascia che ember faccia il display. – MattK

+0

Giusto, questo è esattamente quello che sto provando. Non so, come. – MoMolog

1

È necessario arrivare Ember per fare la cernita utilizzando il proprio mixin ordinabili, e qualche attributo su ogni elemento. Quando chiami il tuo didietro iniziale sull'elemento padre, allega una funzione di trigger di evento di aggiornamento a ciascuno degli elementi e fallo chiamare sortable ('cancel') dopo aver registrato l'intero ordine (prima dell'annullamento), quindi aggiorna ciascuno dei attributi degli articoli.

Ecco un tutorial su questo processo:

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

Problemi correlati