11

我目前正在研究一个 ASP.NET MVC 解决方案,并且最近引入了 Knockout(一个 MVVM JS 库)和 Wijmo(一组 jQuery UI 小部件)。

随着 Knockout 的引入,我还需要在客户端拥有模型,因此为此我将 C# ViewModel 序列化并使用data-model="@Model.ToJson()". 这允许我从 JS 中检索模型并将一些客户端的爱应用于所有内容。

但是,淘汰赛需要一切都是可观察的,所以我需要声明一个单独的客户端 ViewModel 并映射来自数据模型对象的所有内容。这感觉就像重复的努力,我想以某种方式避免它。

我希望有人可以分享一种工具或技术,让我可以直接从服务器渲染淘汰赛 ViewModel。可能的解决方案可能包括:

  • 自定义 JSON 序列化以将可观察视图模型直接呈现到 data-model 属性中的输出。
  • 自动客户端转换(我听说过 ko-autobind,但不确定它是否是推荐的路径或它有多稳定/完整)
  • 我没有想到的东西

我希望解决方案是通用的和自动的,因为我目前手动输入可观察客户端视图模型的方法太低效,不可行。

你是如何解决这个问题的?

4

2 回答 2

10

根据他们的教程,这只是一个简单的.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);
});

对于 ko 映射 http://knockoutjs.com/documentation/plugins-mapping.html

对于自动绑定,这是一个示例

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

于 2012-06-02T22:11:33.953 回答
6

试试这个 Visual Studio 插件 http://visualstudiogallery.msdn.microsoft.com/32c15a80-1c54-4e96-a83f-7cd57573a5d2

于 2013-10-24T12:27:47.560 回答