Как я могу сгенерировать клиентские модели для нокаута в проекте ASP.NET MVC?

В настоящее время я работаю над решением ASP.NET MVC и недавно представил как Knockout (библиотека MVVM JS), так и Wijmo (набор виджетов jQuery UI).

С введением Knockout мне также нужно иметь модели на стороне клиента, поэтому для этой цели я сериализую C # ViewModel и присоединяю его к представлению с помощьюdata-model="@Model.ToJson()". Это позволяет мне извлечь модель из JS и применить какую-либо любовь на стороне клиента ко всему.

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

Я надеюсь, что у кого-нибудь есть инструмент или методика, которые позволят мне визуализировать нокаутированную ViewModel прямо с сервера. Возможное решение может включать в себя:

Настроить сериализацию JSON, чтобы визуализировать наблюдаемую модель представления непосредственно в выходные данные в атрибуте модели данных. Автоматическое преобразование на стороне клиента (я слышал о ko-autobind, но не уверен, будет ли это рекомендуемый путь или насколько он стабилен / завершен) То, о чем я не подумала

Мне бы хотелось, чтобы решение было универсальным и автоматическим, поскольку мой нынешний подход к вводу наблюдаемых моделей представлений на стороне клиента вручную слишком непродуктивен, чтобы быть жизнеспособным.

Как ты решаешь эту проблему?

Ответы на вопрос(2)

.map функция

Если это ViewModel

function Task(data) {
    this.title = ko.observable(data.title);
    this.isDone = ko.observable(data.isDone);
}

И эта функция получает данные с сервера, она использует.map функция для ввода данных сервера прямо в виртуальную машину

// Data
var self = this;
self.tasks = ko.observableArray([]);

// Load initial state from server, convert it to Task instances, then populate self.tasks
$.getJSON("/tasks", function(allData) {
    var mappedTasks = $.map(allData, function(item) {
        return new Task(item)
    });
    self.tasks(mappedTasks);
});

Для картографии Ко http://knockoutjs.com/documentation/plugins-mapping.html

Для автоматической привязки приведен пример

https://groups.google.com/forum/#!msg/knockoutjs/IJTx37UXQVw/UTrWdEK1C-oJ

ВАШ ОТВЕТ НА ВОПРОС