将 ko 绑定应用于局部视图
Apply ko bindings to partial view
我有一个 ko viewmodel。我想在同一页面上渲染局部视图两次。一次用于实际地址,一次用于邮政地址。它们具有相同的属性,只是数据不同。没有包含物理地址和邮政地址的客户端淘汰父视图模型。我正在获取下面的 "You cannot apply bindings multiple times to the same element." 摘录。我可以创建一个名为 addresses 的淘汰模型,它将同时包含物理地址和邮政地址,然后在带有 2 个 div(一个用于邮政,一个用于物理)的部分中使用 with 绑定。我猜这会起作用。但我真的不想创建父模型,除非 necessary.Any 建议?
页数:
@Html.Partial("_Address", Model.PhysicalAddress)
@Html.Partial("_Address", Model.PostalAddress)
部分:
@model Models.AddressDetailsViewModel
<div id="myDiv">
<table class="my-table">
<tr>
<td id="postalCode">
<span data-bind="text: props.postalCode">
</span>
</td>
</tr>
</table>
</div>
<script type="text/javascript">
var data = @(Html.Raw(Json.Encode(Model)));
var viewModel = mapAddress(data);
ko.applyBindings(viewModel, $("#myDiv")[0]);
</script>
我的建议是使用3.2.0版本引入的Knockout Components。
http://knockoutjs.com/documentation/component-registration.html
创建 Knockout 组件并发送参数中的数据一次用于物理地址,一次用于邮政地址。
我决定创建一个带有物理地址和邮政地址的淘汰赛父模型。然后我像这样在父页面上应用绑定:
<div id="physicalAddress">
@Html.Partial("_Address")
</div>
<div id="postalAddress">
@Html.Partial("_Address")
</div>
<script type="text/javascript">
var data = @(Html.Raw(Json.Encode(Model)));
var viewModel = mapParentViewModel(data);
ko.applyBindings(viewModel.viewModels().physicalAddress(), $("#physicalAddress")[0]);
ko.applyBindings(viewModel.viewModels().postalAddress(), $("#postalAddress")[0]);</script>
您可以使用 Knockout 中的 with
绑定将 ViewModel 的各个部分绑定到可重用的分部视图。我前一段时间写了一篇关于这个的博客文章:
https://conficient.wordpress.com/2013/03/07/knockout-multiple-viewmodels-and-reusable-partial-views/
我实际上在示例代码中使用了地址作为示例,因此您应该会发现这很有帮助。在您的示例中,您会这样做:
<div data-bind="with: physicalAddress">
@Html.Partial("_Address")
</div>
<div data-bind="with: postalAddress">
@Html.Partial("_Address")
</div>
这假定两个 DIV 在主 ViewModel 绑定上下文中。请注意,如果任一地址未定义或为空,地址 HTML 将不可见。
Knockout 3.2 版引入了组件的概念,@shailendra-kumar 也指出了这一点。从长远来看,这是一种更好的方法,但部分视图也应该有效。
我有一个 ko viewmodel。我想在同一页面上渲染局部视图两次。一次用于实际地址,一次用于邮政地址。它们具有相同的属性,只是数据不同。没有包含物理地址和邮政地址的客户端淘汰父视图模型。我正在获取下面的 "You cannot apply bindings multiple times to the same element." 摘录。我可以创建一个名为 addresses 的淘汰模型,它将同时包含物理地址和邮政地址,然后在带有 2 个 div(一个用于邮政,一个用于物理)的部分中使用 with 绑定。我猜这会起作用。但我真的不想创建父模型,除非 necessary.Any 建议?
页数:
@Html.Partial("_Address", Model.PhysicalAddress)
@Html.Partial("_Address", Model.PostalAddress)
部分:
@model Models.AddressDetailsViewModel
<div id="myDiv">
<table class="my-table">
<tr>
<td id="postalCode">
<span data-bind="text: props.postalCode">
</span>
</td>
</tr>
</table>
</div>
<script type="text/javascript">
var data = @(Html.Raw(Json.Encode(Model)));
var viewModel = mapAddress(data);
ko.applyBindings(viewModel, $("#myDiv")[0]);
</script>
我的建议是使用3.2.0版本引入的Knockout Components。 http://knockoutjs.com/documentation/component-registration.html
创建 Knockout 组件并发送参数中的数据一次用于物理地址,一次用于邮政地址。
我决定创建一个带有物理地址和邮政地址的淘汰赛父模型。然后我像这样在父页面上应用绑定:
<div id="physicalAddress">
@Html.Partial("_Address")
</div>
<div id="postalAddress">
@Html.Partial("_Address")
</div>
<script type="text/javascript">
var data = @(Html.Raw(Json.Encode(Model)));
var viewModel = mapParentViewModel(data);
ko.applyBindings(viewModel.viewModels().physicalAddress(), $("#physicalAddress")[0]);
ko.applyBindings(viewModel.viewModels().postalAddress(), $("#postalAddress")[0]);</script>
您可以使用 Knockout 中的 with
绑定将 ViewModel 的各个部分绑定到可重用的分部视图。我前一段时间写了一篇关于这个的博客文章:
https://conficient.wordpress.com/2013/03/07/knockout-multiple-viewmodels-and-reusable-partial-views/
我实际上在示例代码中使用了地址作为示例,因此您应该会发现这很有帮助。在您的示例中,您会这样做:
<div data-bind="with: physicalAddress">
@Html.Partial("_Address")
</div>
<div data-bind="with: postalAddress">
@Html.Partial("_Address")
</div>
这假定两个 DIV 在主 ViewModel 绑定上下文中。请注意,如果任一地址未定义或为空,地址 HTML 将不可见。
Knockout 3.2 版引入了组件的概念,@shailendra-kumar 也指出了这一点。从长远来看,这是一种更好的方法,但部分视图也应该有效。