使用Slickgrid进行击倒的正确方法是什么?

时间:2012-07-28 22:23:17

标签: knockout.js slickgrid

将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的全部内容:

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

1 个答案:

答案 0 :(得分:0)

您可以结帐KoGrid

根据他们的页面:

  

KoGrid出于对MVVM / Knockout风格开发而构建的体面数据网格的需求。它从SlickGrid中吸取了相当多的灵感和建筑,但仍然是KO。

我没有尝试过(项目仍然标记为alpha),但我想将它集成到您​​的KO应用程序会更容易。