如何使用ko.computed使ko.sortable工作

时间:2016-02-20 19:07:39

标签: javascript jquery knockout.js

我正在使用淘汰赛和Ryan Niemeyers ko.sortable。 我的目标是将物品从一个容器移动到另一个容器。这很好用。 但是,由于其他情况,我希望将observableArrays对象拖放到ko.computed。

我有一个包含所有元素的基本数组

self.Textbatches = ko.observableArray();

然后我有一个过滤版本

self.TextsTypeOne = ko.computed(function(){
   return ko.utils.arrayFilter(self.Textbatches(),function(t){
       return t.type() === '1';
   });
});

我有另一个带有文本拖动的过滤列表:

self.allocationableTextbatches = ko.computed(function(){
   return ko.utils.arrayFilter(self.Textbatches(),function(t){
       return t.type() === null;
   });
});

然后用'self.TextsTypeOne'和'self.allocationableTextbatches'创建我的两个容器:

<div id="allocationable-texts" class="menupanel">
    <h4 class="select">Text(s) to allocate:</h4>
    <div class="tb-table">
        <div class="tb-list" data-bind="sortable:{template:'textbatchTmpl',data:$root.allocationableTextbatches,allowDrop:true}"></div> 
    </div>
</div>

<div id="TypeOne-texts" class="menupanel">
    <h4 class="select">Text(s) on scene:</h4>
    <div class="tb-table">
        <div class="tb-list" data-bind="sortable:{template:'textbatchTmpl',data:$root.TextsTypeOne,allowDrop:true}"></div> 
    </div>
</div>

,其中

<script id="textbatchTmpl" type="text/html"><div class="textbatch" data-bind="click: $root.selectedText">
    <span class="tb-title" data-bind="text: title"></span>

我可以轻松地将模板设置类型的按钮分别添加到“null”和“1”,并使其按照这种方式工作。但是我希望这是一个拖放功能(以及)和ko.sortable在jquery-ui对象上工作。因此它需要'ordinary''ko.observableArrays'而不是'ko.computed',因为它'拼接'observableArray,并且拖放导致错误“TypeError:k.splice不是函数”。

我试图让'self.allocationableTextbatches'和'self.TextsTypeOne'可写计算,但无济于事。

任何帮助和建议都非常值得赞赏!

提前致谢!

0 个答案:

没有答案