我正在使用这里找到的淘汰简单网格: 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代码进行了更改)。
答案 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进行大量的管道工作,你就不会让它工作。毕竟,它只是一个简单的网格。