[英]Render partial view using knockout.js
我需要根据用户在 Asp.Net MVC4 中的选择加载选项卡。 每个选项卡元素都属于一个局部视图。 每个局部视图都有自己的 Knockout.js 绑定。
单击每个选项卡时,需要在先前选择的选项卡下方呈现部分视图。
这是一个代码片段
<div class="row-fluid top-pad-double" id="tabBasedGrowthDiv">
<ul class="nav nav-pills">
<li><a href="#tabCustomerInfo" data-toggle="tab" data-bind="click:$root.AddTab">CustomerInfo</a></li>
<li><a href="#tabPropertyInfo" data-toggle="tab" data-bind="click: $root.AddTab">PropertyInfo</a></li>
<li><a href="#tabPropertyInfo1" data-toggle="tab" data-bind="click: $root.AddTab">PropertyInfo1</a></li>
</ul>
<div class="tab-content pills pill-sections">
<div data-bind="template: { name: 'tabBasedGrowthTemplate', foreach: $root.tabs}"></div>
</div>
</div>
Knockout.js Html 模板
<script type="text/html" id="tabBasedGrowthTemplate">
<div class="tab-pane" >
<div class="pill-header clearfix">
<h3>Some title</h3>
<div class="pull-right">
<a href="#" class="btn btn-mini" data-toggle="button" rel="tooltip" data-title="lock this section here" data-placement="top"><i class="icon-lock"></i></a>
<a href="#" class="btn btn-mini" rel="tooltip" data-title="close this section" data-placement="left"><i class="icon-remove"></i></a>
</div>
</div>
<div class="pill-content" data-bind="attr:{id: $data.id}">
@Html.Partial("tab based partial view name")
</div>
</div>
</script>
这是视图模型的近似实现。
function TabBasedGrowthViewModel() {
var self = this;
self.tabs = ko.observableArray([TabViewModel]);
self.AddTab = function (){}
}
淘汰赛绑定
<script type="text/javascript">
$(document).ready(function () {
ko.applyBindings(new TabBasedGrowthViewModel(), $("#tabBasedGrowthDiv").get(0));
});
</script>
当我执行上述步骤时,我与呈现局部视图的主视图模型的淘汰赛绑定发生冲突,因为它有自己的淘汰赛绑定。 仅当我使用Knockout.js Html Template
子标题中所示的knockout
模板呈现部分视图时,我才会遇到此冲突。
任何帮助将不胜感激。
提前致谢,Alphacoder
我做了类似的事情,将 NavigationViewModel 绑定到页面并知道要显示什么视图并将其存储在可观察变量中。 然后在每个选项卡周围,使用可见测试来查看是否应根据该变量显示它。
然后你想设置页面以允许你将不同的视图模型绑定到不同的局部视图,你可以使用以下方法进行设置:
// This lets us stop the view model from binding to areas of the page,
// allowing us to bind different objects to parts of the page
ko.bindingHandlers.stopBinding = {
init: function ()
{
return { controlsDescendantBindings: true };
}
};
ko.virtualElements.allowedBindings.stopBinding = true;
ko.applyBindings(navigationViewModel);
然后在你的局部视图中,你使用这个代码来阻止导航视图模型被绑定到它:
<section data-bind="visible: SelectedView() == 'location'">
<!-- ko stopBinding: true -->
<div id="map"></div>
<!-- /ko -->
</section>
并使用以下命令将您的其他模型绑定到此部分:
ko.applyBindings(mapViewModel, $('#map')[0]);
当然,我没有使用模板完成此操作,但是在使用带有淘汰赛的纯 html 和 js 时有效。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.