3

将 Knockout 与 slickgrid 一起使用,我可以添加一行以正常工作,但我无法让单个属性编辑工作。它抛出这个错误:

Uncaught TypeError: Property 'ProductName' of object #<Product> is not a function 

所以它与我的 bindingHandler 有关,因为我在我的对象属性上使用 observables,如果我打开并重新评估数据,我只能获得正确的值来显示:

 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:

http://jsfiddle.net/sbrqB/3/

4

1 回答 1

0

您可以查看 KoGrid

根据他们的页面:

KoGrid 的出现是为了满足我们对为 MVVM/Knockout 风格开发而构建的体面数据网格的需求。它从 SlickGrid 中汲取了大量灵感和架构,但始终是 KO。

我还没有尝试过(并且该项目仍被标记为 alpha),但我想将它集成到您​​的 KO 应用程序中会容易得多。

于 2012-07-29T19:20:46.037 回答