3

我的网络服务器返回一个带有一些结构化标记的页面。我需要使用 knockoutJS 将标记表示形式作为 JSON 对象 - 淘汰视图模型对象。

该页面基本上(在初始加载后)<div data-bind="foreach: ExistingNamings">具有几个封闭的 div,这些 div 实际上包含应该进入视图模型对象的 ExistingNamings 数组的内容。

是否可以根据调用时提供的标记剔除“解析”和现有标记并填充视图模型ko.applyBindings

KNJS 的教程显示了相反的情况——我们在 JS 中有一个数据生成代码,它在调用 applyBindings 时被推送到一个 html 中。

PS 我的服务器端是 ASP.NET MVC,我看到有人建议http://knockoutmvc.com/ - 一种为 js 文件生成初始化代码的方法。这样,它“好像”视图模型是通过 javascript 初始化的。这是处理初始数据的唯一方法,还是我确实可以解析标记?

4

1 回答 1

3

您可以使用 razor 直接将 C# 模型序列化为 JSON,如下所示:

var serverModel = @Html.Raw(Json.Encode(Model));

或者,显然:

var serverProperty = @Html.Raw(Json.Encode(Model.Property));

唯一失败的情况是当您有循环引用时,如果您将实体模型直接放入其中,就会发生这种情况。如果您这样做,请为它们创建一个 ViewModel,以消除循环导航属性。

更新:

要将其添加到您的 viewModel 中,请将其添加到 Razor 视图的底部:

<script type="text/javascript">
    var serverModel = @Html.Raw(Json.Encode(Model));    
    //Define KO viewModel, either here, or by including via script tag in header    
    ko.applyBinding(new ViewModel(serverModel));
</script>
于 2012-07-17T15:54:43.873 回答