Javascript 基于服务器的初始标记填充knockoutJS视图模型对象

Javascript 基于服务器的初始标记填充knockoutJS视图模型对象,javascript,asp.net-mvc,razor,knockout.js,Javascript,Asp.net Mvc,Razor,Knockout.js,我的web服务器返回一个带有结构化标记的页面。我需要使用knockoutJS来将标记表示作为JSON对象-knockout视图模型对象 页面基本上(在初始加载之后)有一个,它有几个封闭的div,实际上包含了应该进入视图模型对象上现有命名数组的内容 是否可以删除“解析”和现有标记,并根据调用ko.applyBindings时提供的标记填充视图模型 一个关于KNJS的教程显示了相反的情况——我们在JS中有一个数据生成代码,在applyBindings调用时,它会被推送到html中 另外,我的服务器端

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

页面基本上(在初始加载之后)有一个
,它有几个封闭的div,实际上包含了应该进入视图模型对象上现有命名数组的内容

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

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


另外,我的服务器端是ASP.NETMVC,我看到有人建议使用这种方法为js文件生成初始化代码。这样,视图模型就好像是通过javascript初始化的。这是处理初始数据的唯一方法,还是我确实可以解析标记

您可以使用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>

var serverModel=@Html.Raw(Json.Encode(Model));
//在此处或通过在标题中包含via脚本标记来定义KO viewModel
应用绑定(新视图模型(服务器模型));

请不要使用knockoutmvc。它是Web表单的邪恶杂种,将每个方法调用都推到服务器上,并将客户端viewmodels的快速性能拖到回发延迟的黑暗沼泽中。这是邪恶的。而且,我也不完全确定我是否理解。您的服务器正在以html格式发送数据?为什么不使用razer?Tyrsius从模型中序列化它?你的意思是在razor中创建json onObject并在js中使用它来初始化视图模型?那可以。如果可能的话,请在回答中给出一个简单的例子,我们很好。谢谢,我知道。如何将其链接到客户端上的淘汰视图模型?仅通过ajax调用?:)