Использование слайса с массивом, созданным плагином отображения Knockout - PullRequest
2 голосов
/ 29 февраля 2012

Я боролся с этим весь день, и я не уверен, что мне не хватает.У меня есть рабочая сетка, созданная с помощью Knockout.Я пытаюсь преобразовать сетку, чтобы использовать плагин сопоставления, и это ломает мою страницу.Как я могу использовать функцию слайса с плагином отображения, чтобы вернуть подмножество моего массива?Чего мне не хватает?

var grid = {};
grid.Model = function (jsondata) {
 var viewModel = {
  items: ko.observableArray()
 };

 $.getJSON('/api/test/items', function (data) {
  viewModel.items= ko.mapping.fromJS(data);
  ko.applyBindings(viewModel)
 });

 viewModel.itemsOnCurrentPage = ko.computed(function () {
  return viewModel.items.slice(1, 10);
 }, viewModel);    
};

Я пытаюсь привязать к itemsOnCurrentPage (foreach: itemsonCurrentPage).Привязка напрямую к элементам работает нормально.Это работало, когда я вручную строил свой массив на стороне клиента.Теперь я собираю данные через jQuery и использую плагин для картирования.Я не могу понять, чего мне не хватает.Любая помощь будет высоко ценится.

Ответы [ 2 ]

4 голосов
/ 29 февраля 2012

Ваша проблема в том, что вычисляемая наблюдаемая itemsOnCurrentPage привязана к вашему исходному массиву observableArray. Когда вы делаете viewModel.items = ko.mapping.fromJS(data), вы устанавливаете viewModel.items равным новому observableArray (тот, с которым itemsOnCurrentPage не связан).

Вместо этого вы можете: ko.mapping.fromJS(data, {}, viewModel.items) обновить существующий массив observableArray.

2 голосов
/ 29 февраля 2012

RP правильно.

Вот JSFiddle, который показывает, что вы делаете:

http://jsfiddle.net/jearles/P99zy/

Вот обновление, которое работает:

http://jsfiddle.net/jearles/P99zy/2/

Единственное отличие заключается в способе загрузки элементов таблицы.

...