С плагином для отображения nockoutjs 2.11 я обнаружил, что ko.mapping.toJS генерирует пустые элементы массива, если viewmodel (с элементом массива) обновляется с помощью ko.mapping.fromJS, а длина нового элемента массива длиннее старого один.нокаут отображение toJS ошибка? пустые элементы массива
Мои исходные данные отображенных является:
var initData = {text: 'Some Text',
arr: [{key: 1, value: 'a'},
{key: 2, value: 'b'}]};
Тогда я обновил вид модели с новым объектом:
var newData = {text: 'Changed Text',
arr: [{key: 1, value: 'aa'},
{key: 12, value: 'bb'},
{key: 13, value: 'cc'}]};
После того, что я назвал ko.mapping.toJS(), я обнаружил, что 3-й элемент массива - пустой объект. Я не уверен, что это ошибка, или я что-то пропустил. Еще одна вещь, которую я заметил, это происходит только в первый раз, когда я обновляю данные. Если я обновляю модель представления с помощью initData, тогда newData снова, результат будет правильным. http://jsfiddle.net/gonglei/xgPSq/
Редактировать: Спасибо за ваш ответ Джейсон. Ваше решение, похоже, не соответствует моей ситуации в моем реальном проекте. Мне нужно получить модифицированный объект данных и отправить его на сервер. Поэтому, когда я вызываю ko.mapping.toJS, я надеюсь, что сразу смогу получить правильный объект данных, а не просто показать строку JSON в вычисленной функции. Я поставил точку прерывания сразу после вызова ko.mapping.toJS и посмотрел объект данных, а третий элемент действительно пуст. И мой сервер получил этот пустой элемент. Расширитель дроссельной заслонки сделал мне правильный объект, но он асинхронный. В любом случае я сообщил об этом как об ошибке, посмотрим, сможет ли разработчик подтвердить это или дать мне решение.
Лучший, вероятно, чтобы сообщить об этой ошибке в протокол HTTPS : //github.com/SteveSanderson/knockout.mapping – Niko
Объект данных верен немедленно, и ko.mapping.toJS возвращает правильный JSON, я думаю, единственная проблема - это ko.mapping.toJS, не вызывающая вызывать изменение gui. –
У меня также возникла проблема в IE 9, где отображение Knockout заполняет пустые элементы в коллекции. Иногда эта ошибка возникает, что затрудняет диагностику. У меня был массив из 4 элементов JSON, который заполнял только первый и последний элементы ([[object Object] ,,, [object Object]]). Странно, да? –