1

有关我正在尝试构建的 UI,请参阅此处的 jsFiddle 链接。首先,用户选择一个会议。所选会议的活动显示在手风琴中,每个活动都有表,这些表在手风琴内显示为纯 html 表。用户应该能够拖放表格并自定义其排序顺序。所有这一切都得到了 Knockout JS 的支持,到目前为止效果很好,但我遇到了障碍......

我遇到的第一个问题是“数据绑定”手风琴。我实现了在此处找到的自定义绑定处理程序解决方案,这似乎工作得很好。但是,我似乎无法可靠地连接表记录的可排序功能。

我不能简单地调用$(".sortable tbody").sortable();. $(document).ready(function(){});尽管这适用于第一次会议,但一旦 SelectedConference 更改,可排序功能就会丢失。我可以将它添加到 Accordion 的自定义活页夹的更新功能中:

update: function (element, valueAccessor) {

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

            //TODO: add sortable call here
        }

这似乎可行,但我是自定义活页夹的新手。这是低效的吗?有没有更好的方法来实现可排序功能?

谢谢!

4

1 回答 1

1

不要担心自定义绑定处理程序,它们是放置这种逻辑的正确位置。

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

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

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

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

演示JSFiddle

于 2013-01-01T16:36:38.147 回答