2013-06-26 2 views
0

Я работаю над онлайн-формой системы, с формами, которые необходимо будет обновлять с течением времени. Я использую Knockout.js вместе с плагином Mapping, чтобы выполнить это, и он работает хорошо.Нокаут JS Сопоставление - Сохранение viewModel свойства нет в базе данных

Одна из проблем, с которыми я столкнулась, заключается в том, что, похоже, отказывается сохранять какие-либо свойства в ViewModel, которые не были в объекте JSON, загруженном из базы данных. Например, если ViewModel, который был сохранен в базу данных выглядит следующим образом:

var viewModel = { 
    prop1: ko.observable(""), 
    prop2: ko.observable(""), 
    prop3: ko.observableArray() 
}; 

Я инициализировать «ViewModel» переменный этот прототип, а затем загрузить свои данные в формате JSON от сервера, ko.mapping.fromJSON(data, {}, viewModel); и это работает, как ожидалось , Вот где моя проблема; Если мой ViewModel теперь имеет дополнительное свойство, например так:

var viewModel = { 
    prop1: ko.observable(""), 
    prop2: ko.observable(""), 
    prop3: ko.observableArray(), 
    prop4: ko.observableArray() 
}; 

Если я загрузить данные в формате JSON, созданные на основе прототипа Firsts, я могу открыть четвертое свойство в ViewModel, добавление и удаление из массива и увидеть его обновлен на экране, но он не будет возвращаться в базу данных, используя ko.mapping.toJSON(viewModel). Я собираюсь, что это связано с свойствами «ko _mapping_», которые присваиваются частям модели viewModel, которые были сопоставлены с использованием плагина сопоставления. Прошу прощения, если эта ситуация была рассмотрена раньше, но я не мог найти ответ.

Мне нужно иметь возможность обновить прототип для viewModel, поскольку его конкретные требования могут незначительно меняться с течением времени. Это может случиться с любой из моих форм, поэтому общее решение будет фантастическим!

Спасибо.

ответ

0

Плагин сопоставления нокаутов автоматически создаст необходимые объекты и наблюдаемые элементы для моделирования JSON, который вы его кормите, поэтому проще всего просто ухаживать за моделью просмотра, поэтому она всегда соответствует тому, что у вас есть на сервере :

var viewModel = function (data) { 
    var model = ko.mapping.fromJS(data); 

    // any custom observables not present in the JSON here 

    return model; 
} 
+0

Я понимаю, о чем вы говорите, но это не очень полезно для моей ситуации. Данные не JSON для начала, а пользовательский ввод, который я использую для сопоставления нокаутом для сохранения в JSON в базе данных. Я очень это ценю! – blusk0