Knockout:在simpleGrid示例中选择

时间:2013-09-04 10:58:29

标签: javascript knockout.js ko.observablearray

我正在使用这里找到的淘汰简单网格: http://knockoutjs.com/examples/grid.html

我希望能够将一个select添加到网格中,该网格的数据绑定属性已分配给我的虚拟机中的对象数组。

所以我在示例中添加了另一列:

this.gridViewModel = new ko.simpleGrid.viewModel({
    data: this.items,
    columns: [
        { headerText: "Item Name", rowText: "name" },
        { headerText: "Sales Count", rowText: "sales" },
        { headerText: "Price", rowText: function (item) { return "$" + item.price.toFixed(2) } },
        *{ headerText: "Select", rowText: function (item) { return "<select data-bind=\"options:items, optionsText: 'name', optionsValue: 'name'\"></select>" } }*
    ],
    pageSize: 4
});

并在控件中将text属性更改为html:

<td data-bind=\"*html*: typeof rowText == 'function' ? rowText($parent) : $parent[rowText] \"></td>\

显示选择,但不填充来自对象数组的数据。

JSFiddle在这里找到: http://jsfiddle.net/vwj2p/1/ (我在上面的简单网格中粘贴了代码,因为我对simplegrid代码进行了更改)。

1 个答案:

答案 0 :(得分:0)

{ headerText: "Select", rowText: function (item) { return "<select data-bind=\"options:$root.items, optionsText: 'name', optionsValue: 'name'\"></select>" } }

我假设每个item对象都没有items属性,而你试图引用viewModel的items数组?如果是这样,请将您的代码更改为上述内容。

但是,这仍然不起作用。如果你查看html binding文档,你会发现它只会吐出静态html。在绑定过程中,当这一切都被渲染时,KO不会将绑定应用于生成的HTML。

我尝试使用代码尝试做ko.applyBindingsToDescendants(viewModel, {td element}),其中{td element}是对带有html绑定的父元素的引用,当observableArray项更新但是没有好像什么都没做。

最重要的是,我认为如果不对simpleGrid进行大量的管道工作,你就不会让它工作。毕竟,它只是一个简单的网格。