【发布时间】:2014-01-06 01:34:14
【问题描述】:
我正在尝试将我的 MVC 应用程序的 _Layout 页面转换为使用淘汰视图模型而不是 Razor 语法。到目前为止,我所有的内容页面都有如下语法来呈现 javascript ViewModels(用于索引视图):
<script type="text/javascript">
$(document).ready(ko.applyBindings(new IndexVm(
@Html.Raw(JsonConvert.SerializeObject(Model, new JsonSerializerSettings() { ContractResolver = new CamelCasePropertyNamesContractResolver() })))));
</script>
到目前为止,这一直很好。现在,在我的布局中,我尝试使用以下相同的方法:
<script type="text/javascript">
$(document).ready(ko.applyBindings(new LayoutVm(
@Html.Raw(JsonConvert.SerializeObject(ViewBag, new JsonSerializerSettings() { ContractResolver = new CamelCasePropertyNamesContractResolver() })))));
</script>
如果内容页面没有内部视图模型声明,则此方法有效。但是当我加载索引页面(使用第一个 sn-p)时,我得到以下信息:
未捕获的错误:您不能将绑定多次应用于同一个元素。
对于为什么这不起作用,我有点难过。任何帮助将不胜感激!
【问题讨论】:
-
一种解决方法可能是在 _Layout 页面的视图模型中声明您的内部视图模型的 observables 和 observableArrays。然后在您的内容页面上,只需用数据填充这些可观察对象。当然,这取决于您的项目范围、您使用的数据的详细信息等