Javascript Knockoutjs和Jquery可拖动div

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(){

我有一个可观察的数组,可以添加或删除元素。元素显示为div。 我想让每个DIV都可以拖动,但是因为DIV是动态创建的,所以我不知道如何做到这一点。我曾考虑使用JQuery live()函数,但我需要传递和操作,因此我认为这不是正确的方法

这是我的代码: 淘汰赛:

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);
    }
};