1

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

我希望能够在网格中添加一个选择,该网格具有分配给我的 vm 中的对象数组的数据绑定属性。

因此,我从示例中添加了另一列:

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 代码进行了更改)。

4

1 回答 1

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

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

但是,这仍然行不通。如果您查看html 绑定文档,您会发现它只会输出静态 html。在这一切都被渲染的绑定过程中,KO 不会将绑定应用到生成的 HTML。

我试着玩弄一下代码来尝试做ko.applyBindingsToDescendants(viewModel, {td element}),哪里{td element}是对带有 html 绑定的父元素的引用,当项目 observableArray 更新但似乎没有做任何事情时。

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

于 2013-09-06T19:22:42.490 回答