Javascript Knockoutjs和Jquery可拖动div
我有一个可观察的数组,可以添加或删除元素。元素显示为div。 我想让每个DIV都可以拖动,但是因为DIV是动态创建的,所以我不知道如何做到这一点。我曾考虑使用JQuery live()函数,但我需要传递和操作,因此我认为这不是正确的方法 这是我的代码: 淘汰赛:Javascript Knockoutjs和Jquery可拖动div,javascript,jquery,knockout.js,Javascript,Jquery,Knockout.js,我有一个可观察的数组,可以添加或删除元素。元素显示为div。 我想让每个DIV都可以拖动,但是因为DIV是动态创建的,所以我不知道如何做到这一点。我曾考虑使用JQuery live()函数,但我需要传递和操作,因此我认为这不是正确的方法 这是我的代码: 淘汰赛: function AssetViewModel() { var self = this; self.assets = ko.observableArray([]); self.addAsset = function(){
function AssetViewModel() {
var self = this;
self.assets = ko.observableArray([]);
self.addAsset = function(){
self.assets.push(
{
id: "1",
content: "Hello World",
type: "Asset"
}
);
}
self.removeAsset = function(asset){
self.assets.remove(asset);
};
};
HTML:
如有任何建议,将不胜感激 尝试阅读下一篇文章- 它包含了详细的解释和样本数量。这是一项适合的工作。要点是您可以创建自己的绑定,这样您就可以如下所示:
<div data-bind="foreach: assets">
<div data-bind="draggable: $data">
<p>More markup</p>
</div>
</div>
您无需返回任何内容,只需通过调用
with
binding init函数,即可创建一个包装器绑定,该绑定执行您的逻辑,并与您返回的绑定类似。在学习自定义绑定时,这通常是一个很好的起点。我不确定您是否只想在layer1 div中添加排序(或在其他dom元素中拖放)。无论您想要什么,我都会使用Knockout Sortable插件()
它为我提供了一个复杂的排序、拖放解决方案,带有Knockout(嵌套多个层的命名模板)
检查该页面底部的JSFiddles以开始
希望有帮助 工作得很有魅力!但我必须做一个改变,它不应该是一个函数。你是对的!不知道我怎么会错过,接得好。我更新了答案。很高兴它对你有用。
<div data-bind="foreach: assets">
<div data-bind="draggable: $data">
<p>More markup</p>
</div>
</div>
ko.bindingHandlers.draggable = {
init: function (element, valueAccessor, allBindingsAccessor, vieModel, bindingContext){
$(element).draggable();
return ko.bindingHandlers.with.init.apply(this, arguments);
}
};