Knockout.js,如何更改映射二维数组的值?

时间:2012-02-26 00:39:46

标签: javascript asp.net-mvc-3 knockout.js knockout-mapping-plugin

我有一个控制器,它返回二维对象数组作为json。我从我的javascript打来电话:

$.getJSON("/Game/GetBoard", function (json) {
    data = json;
    board = ko.mapping.fromJS({ board: data });
    ko.applyBindings(board, $('.board')[0]);
});

我还有以下html:

<table>
    <tbody data-bind="foreach: board">        
        <tr data-bind="foreach: $data">
            <td data-bind="attr: { class: Color }"></td>
        </tr>
    </tbody>
</table>

它生成一个漂亮的2维html表,其中包含颜色很好的单元格(基于来自Color属性的类)。我现在怎样才能将这种颜色更改为其他颜色?

我试过:board[1][1]({Color: 'red'});,但是我收到一条错误,说电路板[1]不存在......

另一个问题是,如何在绑定中添加多个类?我试过了:

...
<td data-bind="attr: { class: Color + ' some-other-class' }"></td>
...

但后来我得到了:

class="function b() {     if (0 < arguments.length) {         if (!b.equalityComparer || !b.equalityComparer(d, arguments[0])) {             b.H(), d = arguments[0], b.G();         }         return this;     }     r.T.Ha(b);     return d; } some-other-class"

这是一个错误还是我做错了什么?

1 个答案:

答案 0 :(得分:3)

映射插件会将您的数组转换为observableArray,并将您的属性转换为可观察数据。

对于第一种情况,您需要执行以下操作来展开可观察数组:board.board()[1][1]

对于另一个问题,颜色是可观察的。如果您在表达式中使用它并想要获取其值,那么您需要执行Color()。所以,它看起来像:

<td data-bind="attr: { class: Color() + ' some-other-class' }"></td>