Как я могу создать модели просмотра на стороне клиента для нокаута в проекте ASP.NET MVC?
В настоящее время я работаю над решением ASP.NET MVC и недавно представил как нокаут (MVVM JS-библиотеку), так и Wijmo (набор виджетов jQuery UI).
С введением Knockout мне также необходимо иметь модели на стороне клиента, поэтому для этой цели я сериализую С# ViewModel и привязываю ее к представлению с помощью data-model="@Model.ToJson()"
. Это позволяет мне получить модель от JS и применить к любой стороне клиентскую любовь.
Однако для нокаута все должно быть наблюдаемым, поэтому мне нужно объявить отдельную ViewModel на стороне клиента и отобразить все из объекта модели данных. Это очень похоже на дублирование усилий, и я хотел бы как-то избежать этого.
Я надеюсь, что у кого-то есть инструмент или техника для совместного использования, что позволит мне отображать нокаут ViewModel непосредственно с сервера. Возможное решение может включать:
- Пользовательская сериализация JSON для визуализации наблюдаемой модели представления непосредственно на выходе в атрибуте модели данных.
- Автоматическое преобразование на стороне клиента (я слышал о ko-autobind, но не уверен, что это будет рекомендуемый путь для принятия или насколько он стабилен/завершен)
- Что-то я не думал о
Я хотел бы, чтобы решение было общим и автоматическим, так как мой текущий подход по набору видимых моделей просмотра на стороне клиента является слишком непродуктивным, чтобы быть жизнеспособным.
Как вы решаете эту проблему?
Ответы
Ответ 1
Согласно их учебникам, это просто простая функция .map
Если это ViewModel
function Task(data) {
this.title = ko.observable(data.title);
this.isDone = ko.observable(data.isDone);
}
И эта функция получает данные с сервера, она использует функцию .map
для ввода данных сервера прямо в VM
// 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);
});
Для отображения ko
http://knockoutjs.com/documentation/plugins-mapping.html
Для автоматического связывания здесь пример
https://groups.google.com/forum/#!msg/knockoutjs/IJTx37UXQVw/UTrWdEK1C-oJ
Ответ 2
Попробуйте этот pluggin для визуальной студии
http://visualstudiogallery.msdn.microsoft.com/32c15a80-1c54-4e96-a83f-7cd57573a5d2