рд╕реВрдЪреА рдореЗрдВ рддрддреНрд╡реЛрдВ рдХреЛ рд╕реНрд╡реИрдк рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдХрд╛рдлреА рд╕рд╛рдорд╛рдиреНрдп рдХрд╛рд░реНрдп рд╣реИред рд▓реЗрдХрд┐рди рдПрдХ рдирд┐рдпрдо рдХреЗ рд░реВрдк рдореЗрдВ, рдпрд╣ рдХрд╛рд░реНрдп рднрдпрд╛рдирдХ рдмреИрд╕рд╛рдЦреА рджреНрд╡рд╛рд░рд╛ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЦрд╛рд╕рдХрд░ рдЕрдЧрд░ рдпрд╣ рдбреНрд░реИрдЧ рдПрдВрдб рдбреНрд░реЙрдк рд╣реИред
рдЕрдм рдореИрдВ рдЖрдкрдХреЛ Marionette.js рдФрд░ jQuery UI Sortable рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдРрд╕рд╛ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдмрд╣реБрдд рд╣реА рд╕рд░рд▓ рдФрд░ рд▓рдЪреАрд▓рд╛ рддрд░реАрдХрд╛ рдмрддрд╛рдКрдВрдЧрд╛ред
рдХрдиреЗрдХреНрдЯ jQuery рдпреВрдЖрдИ
JQuery UI рд╕реЗ рд╣рдореЗрдВ рдХреЗрд╡рд▓ Sortable рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдЪрд╛рд╣рд┐рдП, рдЗрд╕рд▓рд┐рдП, рдЗрд╕рдХреЗ рд▓рд┐рдП рдЯреНрд░реИрдлрд╝рд┐рдХ рдХреЛ рдмрдЪрд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рд╕рд╛рд╣рд╕рдкреВрд░реНрд╡рдХ рдЖрдкрдХреЗ рд▓рд┐рдП рдпрд╣рд╛рдВ рд╕реЗ рд╕рднреА рдЕрдирд╛рд╡рд╢реНрдпрдХ рдЪреЗрдХрдорд╛рд░реНрдХ рдЕрдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд┐рдПред рдЖрдкрдХреЛ рдмрд╕ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдирд╛ рд╣реИред
рдзреНрдпрд╛рди рджреЛ
рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдХреЛрдб Marionette рдХреЗ рд▓рд┐рдП рдПрдХ рд▓рд┐рдВрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ
var Marionette=Backbone.Marionette;
рдПрдХ рд╡реНрдпрд╡рд╣рд╛рд░ рдкреИрдЯрд░реНрди рдмрдирд╛рдПрдВ
рд╣рдо рдЗрд╕ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рд╕реЗ рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рд▓рд┐рдЦрд╛ рдерд╛ ред
рдпрд╣рд╛рдВ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛрдб рд╣реИ рдЬреЛ рд╕рдВрдЧреНрд░рд╣ рдХреЗ рднреАрддрд░ рдореЙрдбрд▓ рдХреЛ рдЫрд╛рдВрдЯрдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реЛрдЧрд╛ред
Behaviors.Sortable=Marionette.Behavior.extend({ onRender:function(){ var collection=this.view.collection // ,items=this.view.children._views // ,view ; for(var v in items){ view=items[v] view.$el.attr('data-backbone-cid',view.model.cid); // cid } this.$el.sortable({ // axis: this.options.axis||false, grid: this.options.grid||false, containment: this.options.containment||false, cursor: "move", handle:this.options.handle||false, revert: this.options.revert||false, update: function( event, ui ) { var model=collection.get(ui.item.data('backbone-cid')); // collection.remove(model,{silent:true}); // - collection.add(model,{at:ui.item.index(),silent:true}); // } }); } });
рдпрд╣ рдХреНрдпрд╛ рд╣реИ
рдпрд╣ рд╡реНрдпрд╡рд╣рд╛рд░ рдкреИрдЯрд░реНрди рдХрд▓реЗрдХреНрд╢рди рд╡реНрдпреВ рдХреЗ рд▓рд┐рдП рд╣реИред рдпрд╣ рдСрдирд░реЗрдВрдбрд░ рдЗрд╡реЗрдВрдЯ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рдмрд╛рдж рдпрд╣ рдкреНрд░рддреНрдпреЗрдХ рдЖрдЗрдЯрдо рджреГрд╢реНрдп рддрддреНрд╡ рдХреЛ cid рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдкрдиреЗ рдореЙрдбрд▓ рдкрд░ рдмрд╛рдВрдзрддрд╛ рд╣реИред
рддрдм рд╣рдо рдЗрд╕ рд╕реВрдЪреА рдХреЛ jQuery рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдбреНрд░реИрдЧ рдПрдВрдб рдбреНрд░реЙрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реЙрд░реНрдЯ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВред
рдЫрд╛рдВрдЯрдиреЗ рдХрд╛ рд╡рд┐рдХрд▓реНрдк
рдкреНрд░рддреНрдпреЗрдХ рджреГрд╢реНрдп рдХреЗ рд▓рд┐рдП, рдЖрдк рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХрд╛ рдЕрдкрдирд╛ рд╕реЗрдЯ рдкрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЕрдзрд┐рдХ рд╡рд┐рд╡рд░рдг рдХреЗ рд▓рд┐рдП, jQuery UI рдкреНрд░рд▓реЗрдЦрди рджреЗрдЦреЗрдВ ред рдЙрдкрд░реЛрдХреНрдд рдХреЛрдб рдореЗрдВ, рд╕рднреА рд╕рдВрднрд╛рд╡рд┐рдд рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЖрдк рдЕрдкрдиреА рдорд░реНрдЬреА рд╕реЗ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред
рдЫрдВрдЯрд╛рдИ
рдЬрдм рддрддреНрд╡реЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЛ рдШрд╕реАрдЯрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╣рдо рд╕рдВрдЧреНрд░рд╣ рд╕реЗ cid рджреНрд╡рд╛рд░рд╛ рдЗрд╕ рддрддреНрд╡ рд╕реЗ рдЬреБрдбрд╝реЗ рдореЙрдбрд▓ рдХреЛ рд╣рдЯрд╛рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рд╡рд╛рдВрдЫрд┐рдд рд╕реВрдЪрдХрд╛рдВрдХ рдореЗрдВ рдлрд┐рд░ рд╕реЗ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВред рдореМрди: рд╕рдЪреНрдЪреЗ рдЭрдВрдбреЗ рдХреА рдЬрд░реВрд░рдд рд╣реЛрддреА рд╣реИ рддрд╛рдХрд┐ рдореИрд░рд┐рдпреЛрдирдЯ.рдЬреЗрдПрд╕ рдЕрдкрдиреЗ рддрд░реАрдХреЗ рд╕реЗ рд╣рд░ рдЪреАрдЬ рдХреЛ рдлрд┐рд░ рд╕реЗ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рди рдХрд░реЗ, рдЗрд╕рдХреЗ рд▓рд┐рдП рдпрд╣ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред
рд╕рдВрдЧреНрд░рд╣ рджреГрд╢реНрдп рдФрд░ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрдиреЗрдХреНрдЯ рдХрд░реЗрдВ
рдЕрдм рдЗрд╕реЗ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдореЗрдВ рд▓рд╛рдЧреВ рдХрд░реЗрдВ
var IView=Marionette.ItemView.extend({// ItemView template:'#item-template' }) var CView=Marionette.CollectionView.extend({// CollectionView itemView:IView, behaviors: {// . Sortable:{// Sortable . // containment containment:'parent' // . } } })
рдЕрдм рдЖрдк рд╕рдВрдЧреНрд░рд╣ рджреГрд╢реНрдп рдореЗрдВ рдбреНрд░реИрдЧ рдПрдВрдб рдбреНрд░реЙрдк рд╡рд┐рдХрд▓реНрдк рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд┐рдВрдЧрд▓ рд▓рд╛рдЗрди рд╡реНрдпрд╡рд╣рд╛рд░: {рд╕реЙрд░реНрдЯреЗрдмрд▓: {}} рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рд╕рд░реНрд╡рд░ рд╕реЗ рдЗрд╕реЗ рдХреИрд╕реЗ рдмрдЪрд╛рдПрдВ?
рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рд╕рд░реНрд╡рд░ рдкрд░ рдХрд┐рд╕ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдСрд░реНрдбрд░ рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реИ, рд▓реЗрдХрд┐рди рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдЖрдк рдСрд░реНрдбрд░ рдХреЛ рдХрд┐рд╕реА рднреА рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдореИрдВ MongoDB рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ, рдЗрд╕рд▓рд┐рдП рд╕рдВрдЧреНрд░рд╣.toJSON () рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдмрд┐рдирд╛ рдХрд┐рд╕реА рднреА рд╕рдорд╕реНрдпрд╛ рдХреЗ рдмрд┐рдирд╛ рдореИрдВ рдЗрд╕реЗ рдиреЛрдб.рдЬреЗрдПрд╕ рд╕рд░реНрд╡рд░ рдкрд░ рднреЗрдЬрддрд╛ рд╣реВрдВ рдФрд░ рдЗрд╕реЗ рд╕рд╣реЗрдЬрддрд╛ рд╣реВрдВред
рдЖрдк рд╕рд░реНрд╡рд░ рдХреЛ рдСрд░реНрдбрд░ рдХреА рдЧрдИ рдЖрдИрдбреА рднреЗрдЬ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ
collection.pluck('id');
рд╡рд╣ рд╕рдм
рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдХрд╛ рдЖрдирдВрдж рд▓реЗрдВ!
рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рд▓реЗрдЦ рдиреЗ рдЖрдкрдХреА рдорджрдж рдХреАред
рдХреГрдкрдпрд╛ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рд▓рд┐рдЦреЗрдВ рдХрд┐ рдЖрдк рдФрд░ рдЕрдзрд┐рдХ рдХреНрдпрд╛ рдкрдврд╝рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред