javascript - 由 Knockout JS 支持的 Accordion 内部 JQuery UI 可排序的困难

标签 javascript jquery jquery-ui knockout.js

查看 jsFiddle 链接 here对于我正在尝试构建的用户界面。首先,用户选择 session 。所选 session 的事件显示在 Accordion 中,每个事件都有表,这些表在 Accordion 中显示为纯 html 表格。用户应该能够拖放表格并自定义其排序顺序。所有这一切都由 Knockout JS 支持,到目前为止,它运行得很好,但我遇到了障碍......

我遇到的第一个问题是“数据绑定(bind)” Accordion 。我实现了自定义绑定(bind)处理程序解决方案,发现 here ,这似乎效果很好。但是,我似乎无法可靠地连接表记录的可排序功能。

我不能简单地在 $(document).ready(function(){}); 中调用 $(".sortable tbody").sortable();.尽管这对于第一个 session 有效,但一旦 SelectedConference 发生更改,可排序功能就会丢失。我可以将它添加到 Accordion 的自定义 Binder 的更新功能中:

update: function (element, valueAccessor) {

            var options = valueAccessor();
            $(element).accordion("destroy")
            $(element).accordion({ active: "h3:last", collapsible: true });

            //TODO: add sortable call here
        }

这似乎有效,但我对自定义 Binder 很陌生。这效率低吗?有没有更好的方法来实现可排序功能?

谢谢!

最佳答案

不用担心custom binding handlers它们是放置这种逻辑的正确位置。

但是我建议您应该仅为可排序逻辑创建一个新的自定义绑定(bind),因为它与您的 Accordion 无关:

ko.bindingHandlers.sortable = {
    init: function (element, valueAccessor) {
        var options = valueAccessor() || {};
        $(element).sortable(options);
    }
}

然后你可以在你的html中使用它:

<tbody data-bind="foreach: Tables, sortable: {}">

演示 JSFiddle .

关于javascript - 由 Knockout JS 支持的 Accordion 内部 JQuery UI 可排序的困难,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14111838/

相关文章:

jquery - 在MVC3中使用CheckBoxFor时,如何使用JQuery仅选择CheckBox INPUT?

jquery - 文字顶部的转移效果

javascript - 是否可以找到元素的父元素然后导航 DOM?

javascript - 如何启用谷歌地图 Controller (右,右..等箭头)

JQuery 循环不选取选中的复选框

javascript - jQuery UI - 如何检查可拖动项目是否对齐

html - 如何构建动态 css 主/子菜单(或者我需要 jquery)?

javascript - 如何对二维整数数组进行升序和降序排序

javascript - 如何检查 Highcharts y 轴是否存在

javascript - 谷歌地图5秒后消失