2011-07-05 3 views
7

Üzerinde çalıştığım bir backbone.js projem var ve bu sayede satırları (bu yüzden backbone.js modelleri) sürükleyip bırakabilirim. jQuery UI update olay Modellerimin siparişlerini yeniden oluşturabiliyorum ve her şey iyi. Bunu gerçekleştirmenin daha temiz bir yolu olup olmadığını merak ediyordum. Aşağıda bazı kodları ekledim.jQuery Kullanıcı Arabirimi sorgusu ve backbone.js

$(".section").sortable({items: 'tr', update: function() 
{ 
    console.log("Event Fire!"); 
    secv.mySort(); 
}}); 

Secv, tabloyu tutan model için Görünümümdür. MySort işlevi, öğelerin sırasını değiştirir ve bunları okur ve gerekli güncelleştirmeyi yapar.

+0

Bu çözüm hakkında neyi beğenmediniz? Çok fazla kod olmadan oldukça iyi çalışıyor. Şu anda omurga ile uygulanan sıraya koyduğum şey de bu. – c3rin

+0

Daha karmaşık olan başka bir seçenek şudur: http://stackoverflow.com/questions/10147969/saving-jquery-ui-sortables-order-to-backbone-js-collection – Cymen

cevap

1

Koleksiyon özelliğini, özellikle başlatma yönteminde View (Koleksiyon) alanında ayarlıyorsunuzdur. Aynı yöntemde, koleksiyonun "değişiklik" veya "yenileme" etkinliğine bir görünüm yöntemini bağlamanız gerekir. Bu yöntem, sıralanan koleksiyonu yeniden çizer; Koleksiyonu, gerektiğinde önceden ayırmak. Teorik olarak, modeliniz potansiyel olarak yeni konumuyla kendini güncelleyecekti ve eğer koleksiyonun bir karşılaştırıcı işlevi varsa, koleksiyon otomatik olarak kendini gösterecektir. Bu durumda, koleksiyonun 'yenileme' olayına bağlanma, sadece görüşün toplama kısmını yeniden oluşturmaya ihtiyaç duyan yukarıda belirtilen yöntemi tetikleyecektir.

+0

Ayrıca, daha önce koleksiyona yeni karşılaştırıcı atayabilirsiniz. sıralama. collection.comparator (işlev (model) {return model.get ('some_property');}); collection.sort(); Koleksiyon koleksiyonunu oluşturmaya bağlayabileceğiniz koleksiyonları _reset_ olayı tetikler. –

+3

Bu, orijinal soruya nasıl cevap veriyor? Sorun şu ki, görünüş (DOM) model koleksiyonundan önce düzenlenmiş, başka bir şekilde değil. – kahoon