2012-05-16 14 views
8

Meteor abonelikleri aracılığıyla doldurulan jQuery UI's .draggable() kullanarak sürülebilir bir DOM nesnesi grubu oluşturmaya çalışıyorum. Benmeteor'da jquery ui davranışlarını doğru bir şekilde nasıl bağlar?

Meteor.subscribe('those_absent', function() { 
    $("li.ui-draggable").draggable({ revert: "invalid" }); 
}); 
Meteor.subscribe('those_present', function() { 
    $("li.ui-draggable").draggable({ revert: "invalid" }); 
}); 

Bunlar gibi görünüyor ile geldi kod herhangi bir zaman toplama değişiklikleri böylece .draggable() davranış eklenecektir bazı Meteor.publish() çağrıları ile gelmektedir. En azından bu benim amacımdı.

Ancak, yalnızca bir kez çalışır - bu <li>'lardan biri sürüklendikten ve bırakıldıktan sonra, artık hiç bir zaman sürüklenemezler. nesneler bırakılır zaman

, ben gibi öğe için Template bağlı özel bir etkinlik ateş ediyorum bu yüzden

$("#c_absent .inner-drop").droppable({ 
     drop: function(event, ui) { 
      ui.draggable.trigger('inout.leave'); 
     } 
    }); 


    Template.loftie_detail.events = { 
     'inout.leave': function (e) { 
      Lofties.update({_id:this._id}, {$set: {present: 'N' }}); 
     } 
    }; 

Yani, benim düşünce damla üzerinde koleksiyonuna bu değişikliğin geçerlilik gerektiğidir pub/sub süreci boyunca ve yukarıdaki .draggable() hattını tekrar çalıştırın. Ama öyle görünmüyor.

bu tam kodu buraya https://github.com/sbeam/in-out/blob/master/client/inout.js görülebilir ve uygulama http://inout.meteor.com/ canlı olduğunu

Yani eğer (öğelerin rastgele değerler kaybetme veya tamamen arayüzünden kaybolan ile diğer bazı muhtemelen alakasız konular var) benim anlayış Meteor'da pub/sub çalışmalarının nasıl kapalı olduğu, bilmek güzel olurdu. Yoksa bu kullanıcı arayüzü davranışını onsuz çalışır hale getirmek için daha etkili bir yol var mı?

+0

http://stackoverflow.com/questions/10453291/how-to-trigger-jquery-draggable-on-elements-created-by -templates/10509361 # comment13641878_10509361 – lashleigh

+2

Ve son zamanlarda http://stackoverflow.com/questions/10646570/how-to-handle-custom-jquery-events-in-meteor. Henüz bunu yapmak için temiz ve uygun bir yol olduğuna ikna olmadım, ama birçok insanın korsanlığı var. – lashleigh

+0

teşekkürler @lashleigh - özetlemek gerekirse, şu andan itibaren, "son" olası andaki "sürüklenebilir()" veya fareyle ilgili olaylarda başka herhangi bir davranış eklemek zorundasınız. Dokunmatik ekranlarda çalışan temiz ve uygun bir yol, aktif araştırma ve katkı için iyi bir alan olacaktır. – sbeam

cevap

4

Uygulamalarımda uygulamamın yolu @lashleigh tarafından gösterilen yöntemle.

Template.myDraggableItem.events({ 
    'mouseover .workItem' : function() { 
     $(this._id).draggable(); 
    } 
}); 

Sonra böyle DragStop dinler:

Böyle kodu kullanarak dinleyen bir şablon olayı var.

$('body').on('dragstop', '.myDraggableItem', function (e) { 
    // Update the collection with the new position 
}; 
Sen aduno.meteor.com bu kodu kullanıyor uygulamayı görebilirsiniz

+0

Bu doğru bir strateji gibi görünüyor, bu yüzden kabul (ama FYI orada app sürükle & bırak ile bazı sorun gibi görünüyor, o yanıt vermiyor) – sbeam

+1

Hey harika, sen de aynı şeyi yapmaya çalışıyorsun! Github için görev yönetimi.Meteor, diğer şeyleri daha kolay hale getirirken sürtünmeyi ve çok zorluyor gibi görünüyor. Projeni izleyeceğim, size iyi şanslar diliyorum. Btw, eğer işe alırsanız, bir kanban tahtası katil olur :) – Milimetric

+2

Bunu kontrol edin, birileri zaten kanban gibi çalışıyor: http://minitrello.meteor.com/ – Milimetric

İlgili konular