我创建了一个说明我的问题的插件:http://plnkr.co/edit/2UMTW2p0UAWPzJ0d0m5F?p=info
我有一个使用Knockout.js ForEach绑定的表。通过在正常位置调用它来调用.footable()初始化程序不起作用。我为footable创建了一个自定义绑定器,并将调用$(element).footable();.这会导致footable初始化,但是因为这发生在自定义绑定器的init中,所以之后会添加更多行,因此表看起来不正确。我在客户绑定器中有一个更新功能,但我无法弄清楚要为valueAccessor设置什么,以便在正确的时间调用它。 (或者根本)理想情况下我希望它使用用于构建表的相同的可观察数组。
我将afterRender添加到ForEach中并帮助了一些,但这需要我在ViewModel中添加足够的logice。
所以,我真正想要做的是找出我需要使用的属性,以便自定义绑定器的更新回调起作用,因此我可以将所有可用的逻辑封装到自定义绑定器中。
答案 0 :(得分:1)
一种方法是用足部绑定取代foreach。 footable binding将监听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'" >
中的更改