Π£ ΠΌΠ΅Π½Ρ Π΅ΡΡΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ sortable-list
ΡΠΎ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΡΠ°Π±Π»ΠΎΠ½ΠΎΠΌ
<!-- templates/components/sortable-list.hbs -->
{{#each items as |item index|}}
{{yield item index}}
{{/each}}
ΠΈ ΠΊΠΎΠ΄
// components/sortable-list.js
export default Ember.Component.extend(PreserveScroll, {
initSortable: function() {
var refreshed = false;
var _this = this;
this.$().sortable({
axis: 'y',
update: function(event, ui) {
Ember.run.scheduleOnce('afterRender', this, function(){
var id = ui.item.data('id').toString();
var idx = Ember.$(this).children().index(ui.item);
Ember.$(this).sortable('cancel');
_this.updateItemOrder(id, idx);
});
},
start: function() { // event, ui
if (!refreshed) {
_this.$().sortable('refreshPositions');
refreshed = true;
}
}
});
}.on('didInsertElement'),
destroySortable: function() {
this.$().sortable('destroy');
}.on('willDestroyElement'),
updateItemOrder: function(key, idx) {
var items = this.get('items');
var item = items.findBy('id', key);
this.beginPropertyChanges();
items.removeObject(item);
items.insertAt(idx, item);
this.endPropertyChanges();
}
});
Π ΠΎΠ΄Π½ΠΎΠΌ ΠΈΠ· ΠΌΠΎΠΈΡ ΡΠ°Π±Π»ΠΎΠ½ΠΎΠ² Π΅ΡΡΡ
<!-- templates/draft/index.hbs -->
{{#sortable-list items=model.items as |item index|}}
{{item-summary item=item index=index}}
{{/sortable-list}}
ΠΡΠΎΠ±Π»Π΅ΠΌΠ°, Ρ ΠΊΠΎΡΠΎΡΠΎΠΉ Ρ ΡΡΠ°Π»ΠΊΠΈΠ²Π°ΡΡΡ, Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π² ΡΠΎΠΌ, ΡΡΠΎ ΠΊΠΎΠ³Π΄Π° Ρ ΡΠΎΡΡΠΈΡΡΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ ΠΈ Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ updateItemOrder
, ΠΏΡΠΈ ΡΡΠΎΠΌ removeObject
ΠΈ insertAt
ΠΎΠ±Π½ΠΎΠ²Π»ΡΡΡ ΠΌΠ°ΡΡΠΈΠ² items
, ΡΠΏΠΈΡΠΎΠΊ Π½Π΅ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠΎΠ²ΡΠ²Π°Π΅ΡΡΡ. Π Π°Π½ΡΡΠ΅ ΡΡΠΎ ΡΠ°Π±ΠΎΡΠ°Π»ΠΎ Π΄ΠΎ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΡΠΈΠ» ΡΡΠΎΡ ΠΊΠΎΠ΄ ΠΈΠ· ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΌΠΎΠ΅Π³ΠΎ ΠΌΠ°ΡΡΡΡΡΠ° Π² ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ.
ΠΠ°ΠΊΠ°Ρ Π²Π΅ΡΡΠΈΡ Embwr? ΠΠΎΠΆΠ΅ΡΠ΅ Π»ΠΈ Π²Ρ ΡΠΎΠ±ΡΠ°ΡΡ JSBin ΠΈΠ»ΠΈ ΡΡΠ΅ΠΏ, ΡΡΠΎΠ±Ρ ΠΏΡΠΎΠ΄Π΅ΠΌΠΎΠ½ΡΡΡΠΈΡΠΎΠ²Π°ΡΡ ΡΡΠΎ?
Π― Π΄ΡΠΌΠ°Ρ, ΡΡΠΎ ΠΌΠΎΠΆΠ΅Ρ ΠΈΠΌΠ΅ΡΡ ΠΊΠ°ΠΊΠΎΠ΅-ΡΠΎ ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΠ΅ ΠΊ ΡΠΎΡΡΠΈΡΡΠ΅ΠΌΠΎΠΌΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² ΠΏΡΡΠ΅ΠΌ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΡ ΠΊΠ»Π°ΡΡΠΎΠ² ΠΈ ΡΡΠΈΠ»Π΅ΠΉ.
@rwjblue the ember-twiddle ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°Π΅Ρ Ember v1.13.5
Π£ ΠΌΠ΅Π½Ρ ΡΠ°ΠΊΠ°Ρ ΠΆΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° Ρ ember + jqueryui sortable https://github.com/embersherpa/ama/issues/10
ΠΡΡΡ ΠΏΡΠ΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΡ?
Π― ΡΠΎΠΆΠ΅ ΡΡΠΎ Π²ΠΈΠΆΡ Π½Π° Ember 1.13.5. ΠΠΎΡ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠ΅ ΡΠ°ΡΡΠΈ ΠΌΠΎΠ΅Π³ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ°:
// components/page-list.js
didInsertElement: function() {
var pageListComponent = this;
this.$("ul.procedure").sortable({
items: 'li:not(:first-child)',
update: function(event, ui) {
var sortOrder = Ember.$(this).sortable('toArray', { attribute: 'data-id' });
var pageModels = [];
sortOrder.forEach(function(id, index) {
pageModels.push({
id: id,
display_index: index
});
});
Ember.$(this).sortable('cancel');
pageListComponent.sendAction('updateSortOrder', pageModels);
}
});
}
<!-- templates/components/page-list.js -->
<ul class="procedure">
{{#each pages as |page|}}
<li class="page-template" data-id="{{page.id}}">
<a class="open-page" {{action 'editPage' page}} data-id="{{page.id}}">
<span class="page-label">Page {{page.id}}, Display {{page.displayIndex}}</span>
</a>
</li>
{{/each}}
</ul>
ΠΏΠΈΠ½Π³ @rwjblue @stefanpenner @wagenet
@dmagunov, ΠΌΡ Π·Π½Π°Π΅ΠΌ ΠΎΠ± ΡΡΠΎΠΉ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ΅, Π½ΠΎ Π΅ΡΠ΅ Π½Π΅ Π΄ΠΎΡΠ»ΠΈ Π΄ΠΎ Π½Π΅Π΅.
@krisselden ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π» (ΠΈ ΠΌΠΎΠΆΠ΅Ρ Π²ΡΠ΅ Π΅ΡΠ΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡ) Π½Π΅ΠΊΠΎΡΠΎΡΡΠΉ ΠΊΠΎΠ΄ ΠΏΠ΅ΡΠ΅ΡΠ°ΡΠΊΠΈΠ²Π°Π½ΠΈΡ ember. ΠΠΎΠΆΠ΅Ρ, Π½Π° ΡΡΠΎΠΉ Π½Π΅Π΄Π΅Π»Π΅ Ρ Π½Π΅Π³ΠΎ Π±ΡΠ΄Π΅Ρ ΡΠ²ΠΎΠ±ΠΎΠ΄Π½ΠΎΠ΅ Π²ΡΠ΅ΠΌΡ.
@stefanpenner Π΅ΡΡΡ Π½ΠΎΠ²ΠΎΡΡΠΈ?
Π― Π½Π΅ ΡΠ²Π΅ΡΠ΅Π½, ΡΡΠΎ ΡΡΠΎ ΡΠ° ΠΆΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°. Π£ ΠΌΠ΅Π½Ρ Π΅ΡΡΡ ΠΏΠΎΠΌΠΎΡΠ½ΠΈΠΊ Π²Π½ΡΡΡΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΠΈΠΊΠ»Π°, ΠΈ ΠΎΠ½, ΠΏΠΎΡ
ΠΎΠΆΠ΅, Π½Π΅ ΡΡΠ°Π±Π°ΡΡΠ²Π°Π΅Ρ, ΠΊΠΎΠ³Π΄Π° Ρ ΠΎΠ±Π½ΠΎΠ²Π»ΡΡ ΠΎΠ΄Π½ΠΎ ΠΈΠ· Π΅Π³ΠΎ ΡΠ²ΠΎΠΉΡΡΠ².
http://ember-twiddle.com/1fa91961e97658e83049
ΠΡΡΠ»ΠΈ?
Π£ ΠΌΠ΅Π½Ρ ΡΠΎΠΆΠ΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ»Π° ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°. ΠΡΡΡ Π»ΠΈ ΡΠΏΠΎΡΠΎΠ± Π²ΡΡΡΠ½ΡΡ Π·Π°ΠΏΡΡΡΠΈΡΡ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΏΠΎΠΌΠΎΡΠ½ΠΈΠΊ Π΄Π»Ρ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ?
ΠΡΠΎ Π½Π΅Π±ΡΠ΅ΠΆΠ½ΠΎ, Π½ΠΎ Ρ Π·Π°ΡΡΠ°Π²ΠΈΠ» Π΅Π³ΠΎ ΡΠ°Π±ΠΎΡΠ°ΡΡ, Π·Π°ΠΊΠ»ΡΡΠΈΠ² ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ sortable-list
Π² Π±Π»ΠΎΠΊ if
ΠΈ Π·Π°ΡΡΠ°Π²ΠΈΠ² Π±Π»ΠΎΠΊ Π²ΡΡΠΈΡΠ»ΡΡΡ false, Π° Π·Π°ΡΠ΅ΠΌ ΡΡΠ°Π·Ρ ΠΆΠ΅ true Π² ΠΎΡΠ΄Π΅Π»Π΅Π½ΠΈΠΈ. ΠΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΡΠΎΠ³ΠΎ ΠΆΠ΅ ΠΊΠΎΠ΄Π° Π² Π±Π»ΠΎΠΊ else ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡ ΠΊ ΡΠΎΠΌΡ, ΡΡΠΎ ΠΏΡΠΈ ΠΈΡΡΠ΅Π·Π½ΠΎΠ²Π΅Π½ΠΈΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠΈ Π½Π΅ Π±ΡΠ΄Π΅Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ.
{{#if showList}}
{{sortable-list ...}}
{{else}}
{{sortable-list ...}}
{{/if}}
actions: {
listUpdated() {
this.set('showList', false);
Ember.run.next(this, function() {
this.set('showList', true);
});
}
}
ΠΠΎΡ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½Π½ΡΠΉ ΡΠ²ΠΈΠ΄Π΄Π»:
http://ember-twiddle.com/50bbf5004db9d6612a84
@stevehanson, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠΏΠ°ΡΠΈΠ±ΠΎ, Π½ΠΎ Π² Π²Π°ΡΠ΅ΠΌ ΡΠ»ΡΡΠ°Π΅ ember ΠΏΠ΅ΡΠ΅ΡΠΈΡΠΎΠ²ΡΠ²Π°Π΅Ρ Π²Π΅ΡΡ ΡΠΏΠΈΡΠΎΠΊ, ΠΏΠΎΡΡΠΎΠΌΡ ΡΠΎΠΊΡΡ, Π²ΡΠ±ΠΎΡ ΠΈ Ρ. Π΄. ΡΠ΅ΡΡΡΡΡΡ.
@dmagunov : ΠΠ°, ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎ Π½Π΅ ΠΈΠ΄Π΅Π°Π»ΡΠ½ΠΎ. ΠΠ°ΠΊΠΎΠ² Π²Π°Ρ ΡΡΠ΅Π½Π°ΡΠΈΠΉ, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ Ρ Π²Π°Ρ Π΅ΡΡΡ ΡΠΎΠΊΡΡ ΠΈΠ»ΠΈ Π²ΡΠ±ΠΎΡ, ΠΊΠΎΡΠΎΡΡΠΉ Π²Ρ Ρ ΠΎΡΠ΅Π»ΠΈ Π±Ρ ΡΠΎΡ ΡΠ°Π½ΠΈΡΡ? ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΡΠΏΠΈΡΠΎΠΊ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠΎΠ²ΡΠ²Π°Π΅ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΡΠ»Π΅ ΠΏΠ΅ΡΠ΅ΡΠ°ΡΠΊΠΈΠ²Π°Π½ΠΈΡ ΡΠΎΡΡΠΈΡΡΠ΅ΠΌΠΎΠ³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° Π² Π½ΠΎΠ²ΡΡ ΠΏΠΎΠ·ΠΈΡΠΈΡ, Π½Π΅ ΠΏΠΎΡ ΠΎΠΆΠ΅, ΡΡΠΎ Ρ Π²Π°Ρ Π±ΡΠ΄Π΅Ρ ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ ΡΠΎΠΊΡΡ ΠΈΠ»ΠΈ Π²ΡΠ±ΠΎΡ, ΠΎ ΠΊΠΎΡΠΎΡΡΡ Π½ΡΠΆΠ½ΠΎ Π±Π΅ΡΠΏΠΎΠΊΠΎΠΈΡΡΡΡ.
@stevehanson Π²ΠΎΡ ΠΌΠΎΠΉ ΡΠ»ΡΡΠ°ΠΉ http://discuss.emberjs.com/t/can-ember-render-only-changes-for-block-elements-helpers/7627
@dmagunov ΠΎ, ΠΏΠΎΠ½ΡΡΠ½ΠΎ. ΠΡΠΌΠ°Π», ΡΡΠΎ Ρ Π²Π°Ρ ΡΠ°ΠΊΠ°Ρ ΠΆΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° Ρ ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠΎΠΉ jQuery UI. ΠΠ°Ρ ΡΠ»ΡΡΠ°ΠΉ ΠΊΠ°ΠΆΠ΅ΡΡΡ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΡΠ»ΠΎΠΆΠ½Π΅Π΅ :(
ΠΠΈΠΆΡ, ΡΡΠΎ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ ΠΏΡΠΎ Π½Π°Ρ Π·Π°Π±ΡΠ»ΠΈ)
+1 ΡΠΎΠ»ΡΠΊΠΎ ΡΡΠΎ ΡΡΠΎΠ»ΠΊΠ½ΡΠ»ΡΡ Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΎΠΉ, ΠΊΠΎΡΠΎΡΠ°Ρ Π²ΠΎΠ·Π½ΠΈΠΊΠ»Π° Ρ ΡΠ²ΠΈΠ΄Π»ΠΎΠΌ , ΠΈ Ρ Π½Π°Ρ Π±ΡΠ» ΠΎΡΠ΅Π½Ρ ΠΏΠΎΡ
ΠΎΠΆΠΈΠΉ ΠΊΠΎΠ΄.
ΠΠ΄Π½Π°ΠΊΠΎ Π½Π°ΡΠ° ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° Π·Π°ΠΊΠ»ΡΡΠ°Π»Π°ΡΡ Π² ΡΠΎΠΌ, ΡΡΠΎ ΠΏΠΎΡΠ»Π΅ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π²Ρ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΠ»ΠΈ ΡΠ»Π°ΠΆΠΎΠΊ, ΠΎΠ½ Π±ΠΎΠ»ΡΡΠ΅ Π½Π΅ ΡΠ΅Π°Π³ΠΈΡΡΠ΅Ρ Π½Π° ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ checked={{is-in array item}}
Π― Π·Π°ΠΌΠ΅ΡΠΈΠ» Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Π²Π΅ΡΠ΅ΠΉ:
true
Π½ΠΎ ΠΏΡΠΎΠ²Π΅ΡΠ΅Π½Π½ΡΠΉ Π°ΡΡΠΈΠ±ΡΡ Π½Π΅ Π±ΡΠ» ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ Π² DOM@jrjohnson ΠΠΎΡΠ»Π΅ Π½Π΅ΠΊΠΎΡΠΎΡΡΡ
preventDefault=false
Π² Π΄Π΅ΠΉΡΡΠ²ΠΈΠΈ. ΠΠΎΡ ΡΠ°ΠΉΠ½Π° Π²ΡΠ΅ Π΅ΡΠ΅ ΠΎΡΡΠ°Π΅ΡΡΡ Π·Π°Π³Π°Π΄ΠΊΠΎΠΉ, Ρ ΠΏΠΎΡΡΠ°ΡΠ°ΡΡΡ ΡΠΎΠ·Π΄Π°ΡΡ Π²Π΅ΡΡΡΡΠΊΡ, ΠΊΠΎΡΠΎΡΡΡ ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΎΡΠΏΡΠΎΠΈΠ·Π²Π΅ΡΡΠΈ.
Π― ΠΏΡΡΠ°ΡΡΡ ΡΠ°Π·ΠΎΠ±ΡΠ°ΡΡΡΡ Π² ΡΡΠΎΠΉ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ΅, ΠΈ ΠΊΠ°ΠΆΠ΅ΡΡΡ, ΡΡΠΎ Π·Π΄Π΅ΡΡ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ°Π·Π½ΡΡ Π²Π΅ΡΠ΅ΠΉ.
@jrjohnson / @aldhsu - Π https://github.com/emberjs/ember.js/issues/11880#issuecomment -130064227:
{{action
Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ "ΠΏΡΠ΅Π΄ΠΎΡΠ²ΡΠ°ΡΠ°Π΅Ρ Π΄Π΅ΡΠΎΠ»Ρ" Π΄Π»Ρ ΡΠΎΠ±ΡΡΠΈΠΉ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΎΠ½ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°Π΅Ρ, ΡΡΠΎ ΠΏΡΠ΅Π΄ΠΎΡΠ²ΡΠ°ΡΠ°Π΅Ρ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ ΡΠ»Π°ΠΆΠΊΠΎΠΌ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ ΠΎΡΠΌΠ΅ΡΠ΅Π½Π½ΡΡ
ΡΠ²ΠΎΠΉΡΡΠ².ΠΡΠΈΠΌΠ΅Ρ ΠΈΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ: http://ember-twiddle.com/35ec52938a0cb6205da3
ΠΡΠ½ΠΎΠ²Π½Π°Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° Π·Π΄Π΅ΡΡ ΡΠ²ΡΠ·Π°Π½Π° Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠΈ jQuery, ΠΊΠ°ΠΊ ΡΡΠΎ Π±ΡΠ»ΠΎ @dmagunov / @stevehanson.
Π― Π²ΠΈΠΆΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ, Π½ΠΎ Ρ Π΅ΡΠ΅ Π½Π΅ Π½Π° 100% ΡΠ²Π΅ΡΠ΅Π½, ΡΡΠΎ Π½Π° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ Π·Π΄Π΅ΡΡ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ. Π Π°Π±ΠΎΡΠ°Π΅Ρ Π»ΠΈ ΡΡΠΎ Π² 1.12 (Π±ΡΡΡΡΠΎΠ΅ ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΡΠ²ΠΈΠ΄Π΄Π»Π° Π½Π° 1.12.1, ΠΊΠ°ΠΆΠ΅ΡΡΡ, ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°Π΅Ρ Π΅ΡΠ΅ Π±ΠΎΠ»ΡΡΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌ)?
@rwjblue ΠΎΠ½ Π½Π΅ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π΄ΠΎΠ»ΠΆΠ½ΡΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ Π½ΠΈ Π² 1.12, Π½ΠΈ Π² ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅ΠΉ Π²Π΅ΡΡΠΈΠΈ 1.13. ΠΠΎ Π²ΠΎΠΏΡΠΎΡΡ ΡΠ°Π·Π½ΡΠ΅. ΠΡΠ½ΠΎΠ²Π½Π°Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° Ρ Π΄Π²ΠΈΠΆΠΊΠΎΠΌ ΠΌΠ΅ΡΡΠ°Π½ΠΈΡ ΡΠΎΡΡΠΎΠΈΡ Π² ΡΠΎΠΌ, ΡΡΠΎΠ±Ρ ΡΠΎΠΎΠ±ΡΠΈΡΡ Π΅ΠΌΡ, ΡΡΠΎ Β«ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ (DOM) ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΈΠ· Π½ΠΈΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΎ, ΠΏΠΎΡΡΠΎΠΌΡ ΠΎΠ±Π½ΠΎΠ²ΠΈΡΠ΅ Π΅Π³ΠΎΒ» ΠΏΠΎΡΠ»Π΅ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠΈ ΠΈ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ ΠΌΠΎΠ΄Π΅Π»ΠΈ.
@rwjblue ΡΠΏΠ°ΡΠΈΠ±ΠΎ Π·Π° Π±ΡΡΡΡΡΠΉ ΠΎΡΠ²Π΅Ρ. ΠΠ·Π²ΠΈΠ½ΠΈΡΠ΅, Ρ Π½Π΅ ΠΏΠΎΠ½ΡΠ», ΡΡΠΎ ΠΏΠΎΠΌΠΎΡΠ½ΠΈΠΊΠΈ ΡΠ²Π»ΡΡΡΡΡ Π°Π½Π°Π»ΠΎΠ³Π°ΠΌΠΈ Π²ΡΡΠΈΡΠ»ΡΠ΅ΠΌΡΡ ΡΠ²ΠΎΠΉΡΡΠ² Π² DOM ΠΈ Π½Π΅ Π±ΡΠ΄ΡΡ ΠΏΠ΅ΡΠ΅ΡΡΠΈΡΡΠ²Π°ΡΡΡΡ, Π΅ΡΠ»ΠΈ ΡΠΎ, ΡΡΠΎ ΠΎΠ½ΠΈ Π½Π°Π±Π»ΡΠ΄Π°ΡΡ, Π½Π΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ»ΠΎΡΡ.
Π― ΠΏΡΠΈΠ½ΡΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΏΠ΅ΡΠ΅ΡΡΠΈΡΠ°Π» ΠΏΠΎΠΌΠΎΡΠ½ΠΈΠΊΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π°Π±Π»ΡΠ΄Π°Π»ΠΈ Π·Π° ΠΌΠ°ΡΡΠΈΠ²Π°ΠΌΠΈ, ΠΏΠ΅ΡΠ΅Π΄Π°Π² array.length
ΡΡΠΎΠ±Ρ Π½Π΅ Π΄ΠΎΠ±Π°Π²Π»ΡΡΡ Π½Π°Π±Π»ΡΠ΄Π°ΡΠ΅Π»Π΅ΠΉ.
@aldhsu - ΠΠ°, ΡΠΎΡΠ½ΠΎ ΡΠ°ΠΊ ΠΆΠ΅ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ!
@rwjblue Π― Π½ΠΈΡΠ΅Π³ΠΎ ΠΈΠ· ΡΡΠΎΠ³ΠΎ Π½Π΅ Π·Π½Π°Π», Π° ΡΠ΅ΠΏΠ΅ΡΡ Π·Π½Π°Ρ! Π‘ΠΏΠ°ΡΠΈΠ±ΠΎ!
ΠΠΎΠ·Π½ΠΈΠΊΠ»Π° ΡΠ° ΠΆΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° Ρ https://github.com/RubaXa/Sortable.
Π£ Π½Π°Ρ ΡΠ°ΠΊΠΆΠ΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ»Π° ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° Ρ jquery sortable Π² Ember 1.13.9.
Π£ ΠΌΠ΅Π½Ρ Π΅ΡΡΡ Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ ΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅ΡΠ° Π΄Π»Ρ ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠΈ Π½Π°ΡΠ΅Π³ΠΎ model.items
ΠΏΠΎ Π·Π°Π΄Π°Π½Π½ΠΎΠΌΡ Π°ΡΡΠΈΠ±ΡΡΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° (ΠΈΠΌΡ ΡΠ°ΠΉΠ»Π°). Π‘Π΄Π΅Π»Π°ΠΉΡΠ΅ ΡΠ°ΠΊ, ΡΡΠΎΠ±Ρ ΠΌΠ°ΡΡΠΈΠ² ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ ΡΠΎΡΡΠΈΡΡΠ΅ΡΡΡ, ΠΈ Π²ΡΡΠΈΡΠ»Π΅Π½Π½ΠΎΠ΅ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ index
(Π΅Π³ΠΎ ΠΏΠΎΠ·ΠΈΡΠΈΡ Π² ΠΌΠ°ΡΡΠΈΠ²Π΅) ΠΎΠ±Π½ΠΎΠ²Π»ΡΠ΅ΡΡΡ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ Π² ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΎΠΌ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ΅. ΠΠ΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ»Π°ΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠ°Ρ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² Π² DOM.
{{#sortable-list updateSortOrder='sortItems'}}
{{#each model.items as |item index|}}
{{#sortable-item item=item index=index}}
{{item.filename}}
{{gallery-item item=item activeIds=activeIds galleryId=model.id remove="remove" toggleActive="toggleActive"}}
{{/sortable-item}}
{{/each}}
{{/sortable-list}}
ΠΠ°ΠΆΠ΅ΡΡΡ, ΡΡΠΎ ΡΠΎΡΡΠΈΡΡΠ΅ΠΌΡΠΉ ΠΏΠ»Π°Π³ΠΈΠ½ Π΄Π΅Π»Π°Π΅Ρ ΡΡΠΎ-ΡΠΎ, ΡΡΠΎ ΠΌΠ΅ΡΠ°Π΅Ρ ΠΏΠΎΠΌΠΎΡΠ½ΠΈΠΊΡ each
ΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°ΡΡ, Π½ΡΠΆΠ½ΠΎ Π»ΠΈ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°ΡΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ. ΠΠΎΠΌΠΌΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ sortable () Π² didInsertElement
ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°ΡΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΏΠΎΡΡΠ΄ΠΊΠ° ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠΈ ΠΌΠ°ΡΡΠΈΠ²Π° Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ΠΌ ΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅ΡΠ° Π² DOM.
ΠΡΠΌΠ°Ρ, Ρ ΠΌΠ΅Π½Ρ ΠΏΠΎΡ
ΠΎΠΆΠ°Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°.
ΠΠ΅ Π·Π½Π°Ρ, Π½ΡΠΆΠ½Π° Π»ΠΈ Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ ΠΎΡΠ΄Π΅Π»ΡΠ½Π°Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΡΡΠΎ Π½Π΅ ΡΠΎ ΠΆΠ΅ ΡΠ°ΠΌΠΎΠ΅.
ΠΠΎΡ JSbin, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°Π΅Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ:
http://emberjs.jsbin.com/sasizoside/1/edit?html , js, ΠΊΠΎΠ½ΡΠΎΠ»Ρ, Π²ΡΠ²ΠΎΠ΄
ΠΠ°Π±Π»ΡΠ΄Π°ΡΠ΅Π»ΠΈ / Π²ΡΡΠΈΡΠ»ΡΠ΅ΠΌΡΠ΅ ΡΠ²ΠΎΠΉΡΡΠ²Π° Π² ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ΅, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠΎΠ»ΡΡΠ°Π΅Ρ ΡΠ²ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΎΡ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ, Π½Π΅ Π·Π°ΠΏΡΡΠΊΠ°ΡΡΡΡ ΠΏΡΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ ΡΡΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ.
ΠΠ½Π΅ ΠΊΠ°ΠΆΠ΅ΡΡΡ, ΡΡΠΎ ΡΡΠΎ ΠΏΡΠΎΠΈΡΡ
ΠΎΠ΄ΠΈΡ ΡΠΎΠ»ΡΠΊΠΎ ΡΠΎΠ³Π΄Π°, ΠΊΠΎΠ³Π΄Π° ΡΡΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠΌ.
ΠΠ±Ρ ΠΎΠ΄Π½ΠΎΠΉ ΠΏΡΡΡ, ΠΊΠΎΡΠΎΡΡΠΉ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π», Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π² ΡΠΎΠΌ, ΡΡΠΎΠ±Ρ Π²ΠΌΠ΅ΡΡΠΎ ΡΡΠΎΠ³ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΄ΡΡΠ³ΠΎΠ΅ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ, Π½Π΅ ΡΠ²Π»ΡΡΡΠ΅Π΅ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠΌ, Π·Π°ΠΏΡΡΠΊΠ°ΡΡ Π½Π°Π±Π»ΡΠ΄Π°ΡΠ΅Π»ΠΈ / Π²ΡΡΠΈΡΠ»ΡΠ΅ΠΌΡΠ΅ ΡΠ²ΠΎΠΉΡΡΠ²Π°.
Ember v1.13.8
ping @wycats , ΡΠΎΠ»ΡΠΊΠΎ ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π½Π°ΠΌ ΠΏΠΎΠΌΠΎΡΡ Ρ ΡΡΠΎΠΉ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΎΠΉ
Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΎΠ±Ρ
ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΡΡΠΈ Ρ ΡΠΌΠΎΠ³ Π·Π°ΡΡΠ°Π²ΠΈΡΡ Π½Π°ΡΡ ΡΠΎΡΡΠΈΡΡΠ΅ΠΌΡΡ ΡΠ°Π±Π»ΠΈΡΡ ΡΠ°Π±ΠΎΡΠ°ΡΡ, Π²ΡΠ·Π²Π°Π² sortable('cancel')
ΠΏΠ΅ΡΠ΅Π΄ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ position
(Π½Π°Ρ 1-ΠΈΠ½Π΄Π΅ΠΊΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΠΈΠ½Π΄Π΅ΠΊΡ). ΠΠ΄Π½Π°ΠΊΠΎ ΡΡΠΎ ΡΡΠ°Π±ΠΎΡΠ°Π»ΠΎ ΡΠΎΠ»ΡΠΊΠΎ Π² ΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅, Π΅ΡΠ»ΠΈ Π΄Π»Ρ ΡΠ²ΠΎΠΉΡΡΠ²Π° key
Π·Π°Π΄Π°Π½ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ @index
Ρ ΠΏΠΎΠΌΠΎΡΠ½ΠΈΠΊΠΎΠΌ each.
each project.sortedTasks key="@index" as |task index|
@JaroVDH http://emberjs.jsbin.com/qitusawavi/1/edit?html , js, ΠΊΠΎΠ½ΡΠΎΠ»Ρ, Π²ΡΠ²ΠΎΠ΄
Π½Π΅Ρ Π½ΠΈΡΠ΅Π³ΠΎ, ΡΡΠΎ Π·Π°ΡΡΠ°Π²Π»ΡΠ΅Ρ Π΅Π³ΠΎ ΡΠ½ΠΎΠ²Π° Π²ΡΠ·ΡΠ²Π°ΡΡ ΠΏΠΎΠΌΠΎΡΠ½ΠΈΠΊΠ°, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΠΎΠ½ Π²ΠΈΠ΄ΠΈΡ ΡΠΎΡ ΠΆΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡ.
ΠΡΠΎΡ Π²ΠΎΠΏΡΠΎΡ - ΠΏΡΠΎΡΡΠΎ ΡΠ²Π°Π»ΠΊΠ° Π΄Π»Ρ ΠΆΠ°Π»ΠΎΠ± Π½Π° ΠΊΠ°ΠΆΠ΄ΡΡ, Π² ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΌΠ°Π»ΠΎ ΡΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠ΅Π΄ΠΏΡΠΈΠ½ΡΡΡ. Π’ΠΎΠ»ΡΠΊΠΎ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»Π΅Π½Π½ΡΠ΅ ΠΏΡΠΈΠΌΠ΅ΡΡ jsbin / ember-twiddle Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ ΡΠ°Π±ΠΎΡΠ°ΡΡ ΡΠ°ΠΊ, ΠΊΠ°ΠΊ Π·Π°Π΄ΡΠΌΠ°Π½ΠΎ, ΠΈΠ·-Π·Π° Π½Π΅ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΡ ΠΏΠΎΠΌΠΎΡΠ½ΠΈΠΊΠΎΠ² ΠΈ Π²Π½ΡΡΡΠ΅Π½Π½ΠΈΡ ΠΌΡΡΠ°ΡΠΈΠΉ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ². ΠΡΡΠ°Π»ΡΠ½ΡΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ ΡΠ²ΡΠ·Π°Π½Ρ Ρ ΠΏΠΎΠ»ΠΎΠΌΠΊΠΎΠΉ Π°Π΄Π΄ΠΎΠ½Π°. ΠΠΎΠΆΠ°Π»ΡΠΉΡΡΠ°, ΠΎΡΠΊΡΠΎΠΉΡΠ΅ Π²ΠΎΠΏΡΠΎΡ ΠΏΠΎ ΡΡΠΈΠΌ Π°Π΄Π΄ΠΎΠ½Π°ΠΌ.
ΠΡΠΎ Π²ΡΠ΅ Π΅ΡΠ΅ ΠΊΠ°ΠΆΠ΅ΡΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΎΠΉ Π² Ember 2.13. ΠΠ΅ΡΠ΅Π΄Π°ΡΠ° ΡΠ²ΠΎΠΉΡΡΠ²Π° MutableArray
Π² ΠΏΠΎΠΌΠΎΡΠ½ΠΈΠΊ Π½Π΅ ΠΏΡΠΈΠ²Π΅Π΄Π΅Ρ ΠΊ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎΠΌΡ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ ΡΡΠΎΠ³ΠΎ ΠΏΠΎΠΌΠΎΡΠ½ΠΈΠΊΠ°, Π΅ΡΠ»ΠΈ ΡΠΎΡΡΠ°Π² ΠΌΠ°ΡΡΠΈΠ²Π° ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡΡ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°, ΡΠ΄Π°Π»Π΅Π½ΠΈΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°). ΠΡΠΎ ΡΠ΅ΡΡΠ΅Π·Π½ΠΎΠ΅ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅, ΠΈ ΠΎΠ±Ρ
ΠΎΠ΄Π½ΡΠ΅ ΠΏΡΡΠΈ Π½Π΅ ΠΈΠ· ΠΏΡΠΈΡΡΠ½ΡΡ
.
Π‘Π°ΠΌΡΠΉ ΠΏΠΎΠ»Π΅Π·Π½ΡΠΉ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΉ
ΠΡΠΎ Π²ΡΠ΅ Π΅ΡΠ΅ ΠΊΠ°ΠΆΠ΅ΡΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΎΠΉ Π² Ember 2.13. ΠΠ΅ΡΠ΅Π΄Π°ΡΠ° ΡΠ²ΠΎΠΉΡΡΠ²Π°
MutableArray
Π² ΠΏΠΎΠΌΠΎΡΠ½ΠΈΠΊ Π½Π΅ ΠΏΡΠΈΠ²Π΅Π΄Π΅Ρ ΠΊ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎΠΌΡ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ ΡΡΠΎΠ³ΠΎ ΠΏΠΎΠΌΠΎΡΠ½ΠΈΠΊΠ°, Π΅ΡΠ»ΠΈ ΡΠΎΡΡΠ°Π² ΠΌΠ°ΡΡΠΈΠ²Π° ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡΡ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°, ΡΠ΄Π°Π»Π΅Π½ΠΈΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°). ΠΡΠΎ ΡΠ΅ΡΡΠ΅Π·Π½ΠΎΠ΅ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅, ΠΈ ΠΎΠ±Ρ ΠΎΠ΄Π½ΡΠ΅ ΠΏΡΡΠΈ Π½Π΅ ΠΈΠ· ΠΏΡΠΈΡΡΠ½ΡΡ .