根据服务器的初始标记填充knockoutJS视图模型对象

时间:2012-07-16 22:50:27

标签: javascript asp.net-mvc razor knockout.js

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

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

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

关于KNJS的教程反过来说 - 我们在JS中有一个数据生成代码,并在applyBindings调用时被推送到html。

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

1 个答案:

答案 0 :(得分: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>