Knockout.js 如何刷新与淘汰赛绑定的Footable?

Knockout.js 如何刷新与淘汰赛绑定的Footable?,knockout.js,footable,Knockout.js,Footable,我已经创建了一个演示我的问题的plunk: 我有一个使用Knockout.js ForEach绑定的表。在正常位置调用.footable()初始值设定项无效。我为footable创建了一个自定义活页夹,并将调用$(element).footable();。这会导致footable初始化,但由于这发生在自定义绑定器的init中,因此会在后面添加更多行,因此表看起来不正确。我在customer活页夹中有一个更新函数,但我无法确定为valueAccessor设置什么,因此它会在正确的时间被调用。理想情

我已经创建了一个演示我的问题的plunk:

我有一个使用Knockout.js ForEach绑定的表。在正常位置调用.footable()初始值设定项无效。我为footable创建了一个自定义活页夹,并将调用$(element).footable();。这会导致footable初始化,但由于这发生在自定义绑定器的init中,因此会在后面添加更多行,因此表看起来不正确。我在customer活页夹中有一个更新函数,但我无法确定为valueAccessor设置什么,因此它会在正确的时间被调用。理想情况下,我希望它使用与构建表相同的可观察数组

我将afterRender添加到ForEach中,这对我有所帮助,但这需要我在ViewModel中添加footable logice


所以,我真正想做的是弄清楚我需要使用什么属性,这样自定义绑定器的更新回调就可以工作了,这样我就可以将所有可折叠逻辑封装到自定义绑定器中。

一种方法是用可折叠绑定替换foreach。footable绑定将侦听observableArray中的更改,并自动添加foreach绑定

ko.bindingHandlers.footable = {
    init: function (element, valueAccessor, allBindings, viewModel, bindingContext) {
        $(element).closest("table").footable();
    },
    update: function(element, valueAccessor) {  
        //this is called when the observableArray changes
        //and after the foreach has rendered the contents       
        ko.unwrap(valueAccessor()); //needed so that update is called
        $(element).closest("table").trigger('footable_redraw');
    }
}

ko.bindingHandlers.footable.preprocess = function(value, name, addBindingCallback) {
    //add foreach binding
    addBindingCallback('foreach', '{ data: ' + value +  '}');
    return value;
}
用法:

<tbody data-bind = "footable: items, delegatedHandler: 'click'" >


请参阅

+1中的更改以获得良好的解释,这是一个非常好的解决方案,正是我所需要的!这是为其他需要它的人准备的预处理文档。()在使用此解决方案时,我遇到了一点障碍,当时我试图用一个任务列表来做一个示例,其中每个任务都可以包含一个任务列表。我提出了一个新问题,因为我认为这仍然是大多数情况下的正确解决方案。这是正确的答案。我现在遇到的问题是因为我可以用脚来重新画,与这个答案无关。如果你对Footable很在行,如果你能看看为什么重画会造成问题,我会非常感激。不幸的是,我也不知道。可供选择的源代码很长,不用担心。你应该退房。这是对我的另一个问题的回答,建立在你的回答之上。