Ответ 1
Вот несколько вариантов, если вы собираетесь конвертировать их в JSON:
-
если вы используете функции-конструкторы для своего объекта, вы можете переопределить функцию
.toJSON
, чтобы контролировать, какие свойства вывести. Вот статья на нем: http://www.knockmeout.net/2011/04/controlling-how-object-is-converted-to.html. Вот пример: http://jsfiddle.net/rniemeyer/FE4HX/. -
в KO 2.1, при использовании
ko.toJSON
второй и третий аргументы теперь передаются вJSON.stringify
. Вот несколько документов по аргументам: https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/JSON/stringify. Это означает, что вы можете передать второй аргумент (replacer
) либо массивом свойств для включения, либо функцией, которая обрабатывает ключ/значения. Вот такой же пример, используя этот метод: http://jsfiddle.net/rniemeyer/huyLe/. -
Другим вариантом, который я часто использую, является определение вычислений, которые вы не хотите в своем JSON-выходе в качестве суб-наблюдаемых. Обсерватории - это функции, которые являются объектами, поэтому вы можете фактически определять наблюдаемые на наблюдаемых. Как:
-
this.name = ko.observable("Bob");
this.name.formatted = ko.computed(...);
Теперь, когда преобразование в JSON, formatted
будет естественно потеряно, поскольку name
преобразуется в его значение. Здесь снова повторяется один и тот же образец: http://jsfiddle.net/rniemeyer/peEGG/. Обычно я использую это, когда это метаданные об наблюдаемом (isValid
, isEditing
и т.д.).