Я все еще изучаю правильное использование Knockout, и я быстро ухожу от того, чтобы когда-либо вводить ko.observable
при настройке мою модель просмотра, а вместо этого просто определяю литерал объекта и передавая его через плагин сопоставления с чем-то вроде
var viewModel = ko.mapping.fromJS(data);
или, по крайней мере, чем-то вроде вставки всех моих данных в атрибут на viewModel, например
var viewModel = {
... events etc ... ,
"data": ko.mapping.fromJS(data)
}
честно говоря, основная причина, по которой я это делаю, - это избавиться от необходимости многократно набирать ko.observable
и ko.observableArray
. Я просто пытаюсь понять, является ли это хорошим подходом и есть ли какие-либо недостатки в отказе от конкретного объявления var x = ko.observable ()
целиком. Кроме того, я делаю все это при загрузке, а не в ответ на какой-либо вызов ajax и т. Д., Что, насколько я могу судить, является тем, для чего был разработан плагин сопоставления.
В своей работе с нокаутом вы по-прежнему объявляете наблюдаемые вручную, одну за другой, или вы выбрали метод mapping.fromJS, который я использую? Есть ли какие-то особые недостатки в таком частом использовании модуля сопоставления?
Редактировать:
В этой статье Стив настраивает свой viewModel, выполнив
var initialData = [ { ... } , { ... } ]; // json from the serializer
var viewModel = {
gifts : ko.observableArray(initialData)
};
Обычно я бы просто использовал ko.mapping.fromJS
и для этой ситуации, в частности, чтобы убедиться, что объекты в массиве также превращаются в наблюдаемые. Глядя на то, что он сделал, мой подход кажется излишним и добавляет немного ненужных накладных расходов.