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

Populate knockoutJS view model object based on an initial markup from the server

本文关键字:knockoutJS 填充 视图 模型 对象 服务器      更新时间:2023-10-25

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

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

能否根据调用ko.applyBindings时提供的标记来敲除"解析"和现有标记并填充视图模型?

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

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

您可以使用类似以下的剃刀将C#模型直接序列化为JSON:

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

或者,很明显:

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

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

更新:

要将其放入您的viewModel,请将其添加到Razor View:的底部

<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>