重复使用部分视图与绑定淘汰JS

时间:2016-03-08 10:07:06

标签: knockout.js view partial

在登陆页面中,我将绑定应用于部分视图。 ( “myModalSeeAllDrafts”)

登陆页面:

@Html.Partial("~/Views/Home/JumpStartYourJourney/_SeeAllDrafts.cshtml")

var journeyDrafts = {
                dataUrl: '@Url.Action("GetSeeAllDraftsData", "Home")',
                selectUrl: '@Url.Action("GetDraftJourney", "Home")',
                deleteUrl: '@Url.Action("DeleteDraftBooking", "Home")'
            };

 var journeyDraftsVM = new JourneyDraftsViewModel(journeyDrafts);
            ko.applyBindings(journeyDraftsVM, $("#myModalSeeAllDrafts")[0]);

我想重用其他视图中的部分

旅行者观点:

@Html.Partial("~/Views/Home/JumpStartYourJourney/_SeeAllDrafts.cshtml")

var url = {
            dataUrl: '@Url.Action("GetSeeAllDraftsData", "Home")',
            selectUrl: '@Url.Action("GetDraftJourney", "Home")',
            deleteUrl: '@Url.Action("DeleteDraftBooking", "Home")',
        };
        var journeyDraftsViewModel = new JourneyDraftsViewModel(url);
        ko.applyBindings(journeyDraftsViewModel, $("#myModalSeeAllDrafts")[0]);

我收到错误,未捕获的语法错误:您无法多次将绑定应用于同一元素。 不是这样,一旦你到了另一个页面,那个视图中的绑定已经过期了吗?

请帮忙。

1 个答案:

答案 0 :(得分:0)

您必须更改第二个绑定:$("#myModalSeeAllDrafts")[1]

但这不是一个好方法,因为你有2个或更多元素具有相同的id:你可以发送id作为在partialview中包含元素的参数。

@Html.Partial("_SeeAllDrafts", "id2")
@Html.Partial("_SeeAllDrafts", "id1")

和部分:

@model string

<div id='@Model'>
    <span data-bind="text: name"></span>
</div>

然后将绑定更改为

@section scripts
{
    <script type="text/javascript">
        $(function () {
            var journeyDraftsViewModel = { name: "refan" };
            ko.applyBindings(journeyDraftsViewModel, document.getElementById('id1'));
            ko.applyBindings(journeyDraftsViewModel, document.getElementById('id2'));
        });
    </script>
}

--------------------- OR -----------------------

您可以使用具有不同ID的div包装部分:

<div id="id1">
    @Html.Partial("_SeeAllDrafts")
</div>

<div id="id2">
    @Html.Partial("_SeeAllDrafts")
</div>

$(function () {
     var journeyDraftsViewModel = { name: "refan" };
     ko.applyBindings(journeyDraftsViewModel, document.getElementById('id1'));
     ko.applyBindings(journeyDraftsViewModel, document.getElementById('id2'));
});

然后根据此ID进行绑定。

-------------------如果你没有任何其他约束力------------------- ---

您可以在文档准备就绪之后对整页进行一次绑定。

$(document).ready(function () {
    var journeyDraftsViewModel = new JourneyDraftsViewModel(url);
    ko.applyBindings(journeyDraftsViewModel);
});