我的网络服务器返回一个带有结构化标记的页面。我需要使用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初始化。这是处理初始数据的唯一方法,还是我确实可以解析标记?
答案 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>