将Knockout与slickgrid一起使用我可以添加一行以正常运行,但我无法使单个属性编辑工作。它抛出了这个错误:
Uncaught TypeError: Property 'ProductName' of object #<Product> is not a function
所以它与我的bindingHandler有关,因为我在我的对象属性上使用了observable,如果我展开并重新评估数据,我只能显示正确的值:
var data = ko.utils.unwrapObservable(settings.data);
$.each(data, function(index, item) {
var prop;
for (prop in item) {
if (item.hasOwnProperty(prop)) {
data[index][prop] = ko.utils.unwrapObservable(data[index][prop]);
}
}
});
var columns = ko.utils.unwrapObservable(settings.columns);
var options = ko.utils.unwrapObservable(settings.options) || {};
grid = new Slick.Grid(element, data, columns, options);
编辑功能位于我的viewModel:
function ViewModel(data) {
var self = this;
self.gridData = ko.observableArray(data);
self.columns = [
{
name: 'Product ID',
id: 'ProductId',
field: 'ProductId'},
{
name: 'Color',
id: 'ColorName',
field: 'ColorName'},
{
name: 'Sku',
id: 'Sku',
field: 'Sku'},
{
name: 'Product Name',
id: 'ProductName',
field: 'ProductName'}
];
self.fnTestClickEdit = function() {
self.gridData()[0].ProductName("Product has been Edited " + new Date());
};
}
但看到我如何处于死胡同,我在这里的实施中是否做了一些明显的错误?
以下是jsFiddle的全部内容:
答案 0 :(得分:0)
您可以结帐KoGrid
根据他们的页面:
KoGrid出于对MVVM / Knockout风格开发而构建的体面数据网格的需求。它从SlickGrid中吸取了相当多的灵感和建筑,但仍然是KO。
我没有尝试过(项目仍然标记为alpha),但我想将它集成到您的KO应用程序会更容易。