Knockout.js, как изменить значение сопоставленного двумерного массива? - PullRequest
2 голосов
/ 26 февраля 2012

У меня есть контроллер, который возвращает двухмерный массив объектов в виде 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>

Он генерирует красивую двумерную 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 Ответ

3 голосов
/ 26 февраля 2012

Подключаемый модуль преобразования превратит ваш массив в observableArray, а ваши свойства - в наблюдаемые.

В первом случае вам нужно развернуть наблюдаемый массив, выполнив: board.board()[1][1]

Что касается другого вопроса, цвет является наблюдаемым. Если вы используете его в выражении и хотите получить его значение, то вам нужно сделать Color (). Итак, это будет выглядеть так:

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