В моем JS есть следующий ajax-вызов, который связывает результирующий json с помощью плагина отображения нокаута.
$.getJSON("/Game/GetRack", function (data) {
game.rack = ko.mapping.fromJS(data);
ko.applyBindings(game.rack, $('.rack')[0]);
});
/Get/GetRack
возвращает:
[{"Color":3,"Letter":"a","Points":5},null,null]
Как видите, в массиве только один объект.Два других значения равны нулю.
Теперь, используя отображение выбивки, я могу сделать:
ko.mapping.fromJS([null, { Color: 55, Letter: "b", Points: 88 }, null], game.rack);
Это правильно обновляет мой взгляд, и теперь я вижу только букву B во второй позиции.Два других являются нулевыми.
Мои вопросы: Могу ли я обновить значение в определенной позиции без использования mapping.fromJS?
Итак, если у меня есть буква A с индексом 0, я хочуизменить второй ноль на
{ Color: 55, Letter: "b", Points: 88 }
и заставить мой пользовательский интерфейс автоматически обновляться, чтобы напоминать это изменение.Как это может быть сделано?
Редактировать:
Я решил пойти по примеру Джона Эрлза.К сожалению, у меня все еще есть проблема, потому что мой массив двухмерный.
У вас есть пример здесь: http://jsfiddle.net/wgZ59/29/
(это очень похоже на пример Джона Эрлса, но включает в себя двумерный массив).
Может кто-нибудь указать, почему нажатие на кнопку изменения не меняет значения элементов?Можно ли также изменить их значения без вызова HasMutated ()?
И последний (только если решены два предыдущих).Можно ли создавать html-таблицу статически (потому что, например, я знаю, что она всегда будет 3х3, поэтому мне нужно две таблицы печати с 3 строками и 3 столбцами, а затем привязать каждую отдельную ячейку к ячейкам матрицы.проблемы, потому что у нокаута не было значений для ячеек ...
EDIT2:
Я сам смог ответить на мои вышеупомянутые вопросы, пример скрипки здесь:
http://jsfiddle.net/wgZ59/44/
Итак, я могу создать статическую таблицу и привязать отдельные ячейки, когда я объявляю массив следующим образом:
self.matrix = ko.observableArray([[0,0,0],[0,0,0],[0,0,0]]);
или
self.matrix = ko.observableArray([[,,],[,,],[,,]]);
.
Я могу обновить значения, и это работает для статической таблицы, но это не работает для динамической таблицы (создаваемой динамически нокаутом). Вы можете увидеть поведение настраница скрипки (ссылка в начале этого редактирования). Знаете ли вы, почему нажатие кнопки «изменить» не обновляет значения в динамически создаваемой таблице?