.draggable()
Meteorサブスクリプションを介して入力されるjQueryUIを使用して、ドラッグ可能なDOMオブジェクトのグループを作成しようとしています。私が思いついたコードは次のようになります
Meteor.subscribe('those_absent', function() {
$( "li.ui-draggable" ).draggable( { revert: "invalid" } );
});
Meteor.subscribe('those_present', function() {
$( "li.ui-draggable" ).draggable( { revert: "invalid" } );
});
これらは一部のMeteor.publish()
呼び出しに対応しているため、コレクションが変更されるたびに.draggable()
動作がアタッチされます。少なくとも、それが私の意図でした。
ただし、これは1回だけ機能します。これら<li>
のいずれかをドラッグアンドドロップすると、ドラッグできなくなります。
Template
オブジェクトがドロップされると、そのようなアイテムのに添付されているカスタムイベントを発生させます。
$( "#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' }});
}
};
したがって、私の考えでは、ドロップ時のコレクションへのこの変更は、pub / subプロセスを介して伝播し、上記の行を再実行する必要.draggable()
があります。しかし、そうではないようです。
このための完全なコードはhttps://github.com/sbeam/in-out/blob/master/client/inout.jsで確認でき、アプリはhttp://inout.meteor.com/で公開されています(アイテムがランダムに値を失ったり、UIから完全に消えたりする、他のおそらく無関係な問題です)
したがって、Meteorでのpub / subの動作についての私の理解がずれている場合は、知っておくとよいでしょう。または、それなしで機能するこのUI動作バインディングを実現するためのより効率的な方法はありますか?