我正在使用敲除自定义bindingHandler根据rniemeyer的示例将数据绑定到slickgrid,当代码运行时,如果单击“添加”链接,则使用myObservableArray.push(newRow)将行添加到网格中,但是,当您尝试通过“替换”链接替换网格中的所有数据时,网格不会更新,并且添加按钮会停止工作。我试图通过调用myObservableArray(multipleRows)更新obsevable数组这是正确的做法吗?
示例: http://jsfiddle.net/davidoleary/bwSmy/
var viewModel = {
items: ko.observableArray([]),
addItem: function() {
this.items.push(new Item(0, "New", 5.00)); // works
},
replace: function() {
var newList = [new Item(0, "New", 6.00),new Item(0, "New", 7.00)]
this.items(newList); // fails without throwing error
},
}
答案 0 :(得分:1)
您在淘汰赛自定义绑定的更新中错过了SetData。 grid.setData(数据,TRUE);
这就是它的样子:
ko.bindingHandlers.slickGrid = {
init: function(element, valueAccessor) {
var settings = valueAccessor();
var data = ko.utils.unwrapObservable(settings.data);
var columns = ko.utils.unwrapObservable(settings.columns);
var options = ko.utils.unwrapObservable(settings.options) || {};
grid = new Slick.Grid(element, data, columns, options);
},
update: function(element, valueAccessor, allBindingAccessor, viewModel) {
var settings = valueAccessor();
var data = ko.utils.unwrapObservable(settings.data); //just for subscription
grid.resizeCanvas(); // NB Very important for when a scrollbar appears
grid.setData(data,true); // This is what was missing
grid.render();
}
}
答案 1 :(得分:0)
我不使用Knockout,但我想它需要看起来像这样:
var newList = [new Item(0, "New", 6.00),new Item(0, "New", 7.00)];
this.items(ko.observableArray(newList));
答案 2 :(得分:0)
Knockout和SlickGrid使用底层数据阵列来执行他们的工作。您需要做的就是让他们使用相同的数组。 通过
this.items(newList);
你让Knockout使用其他数组。这里好的opton是要求SlickGrid做同样的事情:
grid.setData(newList, true);
grid.render();
这里有http://jsfiddle.net/bwSmy/6/来查看其他选项