que tienen una plantilla estándar en un archivo HTML como:cómo desencadenar JQuery .draggable() en elementos creados por plantillas?
<template name="cards">
{{#each all_cards}}
{{> card_item}}
{{/each}}
</template>
<template name="card_item">
<div class="card" style="left:{{position.x}}px; top:{{position.y}}px">
{{title}}
</div>
</template>
Quiero tener las tarjetas (CSS selector de .card) se convierten en arrastrable con jQuery. Ahora, dado que Meteor actualiza automágicamente el DOM utilizando la plantilla, ¿cuándo y cómo sé dónde llamar a .draggable() en qué?
EDIT: Esto es lo que va mi solución que hace que los movimientos pendientes en otro cliente visibles con una animación oscilante (utilizando CSS3):
Template.card_item.events = {
'mouseover .card': function (e) {
var $target = $(e.target);
var $cardContainer = $target.hasClass('card') ? $target : $target.parents('.card');
$cardContainer.draggable({containment: "parent", distance: 3});
},
'dragstart .card': function (e) {
Session.set("dragging_id", e.target.id);
$(e.target).addClass("drag");
pos = $(e.target).position();
Events.insert({type: "dragstart", id:e.target.id, left: pos.left, top: pos.top});
},
'dragstop .card': function (e) {
pos = $(e.target).position();
Events.insert({type: "dragstop", id:e.target.id, left: pos.left, top: pos.top});
Cards.update(e.target.id, {$set: {left:pos.left, top:pos.top}});
Session.set("dragging_id", null);
}
}
Events.find().observe({
added: function(event) {
if (event.type == "dragstart" && !Session.equals("dragging_id", event.id)) {
$("#"+event.id).draggable({disabled: true});
$("#"+event.id).addClass("wobble");
}
if (event.type == "dragstop" && !Session.equals("dragging_id", event.id)) {
$("#"+event.id).animate({left: event.left, top: event.top}, 250);
Events.remove({id:this.id});
$("#"+event.id).draggable({disabled: false});
}
}
});
Use 'Meteor.defer', no está en la documentación, pero esta pregunta lo explica. Lo estoy usando para hacer una lista ordenable en este momento y funciona bien. http://stackoverflow.com/questions/10109788/callback-after-the-dom-was-updated-in-meteor-js – lashleigh
¡Gracias, lo comprobaré! - ¡Genial, esto funciona por montones! –
Saludos, eres bienvenido. Además, aprendí que meteor.defer es solo un contenedor para setTimeout, escribe 'Meteor.defer' en la consola sin argumentos para ver a qué me refiero. – lashleigh