【问题标题】:knockout + partials + mvc + correct way to bind淘汰赛 + 部分 + mvc + 正确的绑定方式
【发布时间】:2014-10-23 12:52:31
【问题描述】:

亲爱的程序员们

我让自己陷入了泡菜。我已经参加了 2 周的淘汰赛,恐怕我不了解它的基本概念。所以对我温柔一点。

情况:

我有一个主视图布局页面 /Master 使它变得简单。在这里,我有 2 列布局。 左侧是一个包含患者的列表框,单击一个后,您将看到添加到其下方列表框中的处方。很简单...

不要介意这里的渲染体,这是错误的。只需使用此图像即可查看 2 个主要部分。红色和黄色。

现在我的 Master 工作得很好,当我点击一个病人时,我想在屏幕的黄色部分加载一个特定的局部视图。点击处方也是一样,然后我想在黄色部分加载处方部分。

我得到了这 2 个编辑屏幕,但没有包含主屏幕。这些页面如下所示:

@model  FysioNotes.WebMVC.Models.ViewModels.EditPatientViewModel

这里是表单+绑定

@section 脚本 {

<script src="~/MyScripts/patientVm.js" />
<script>
    $(function () {
        ko.applyBindings(new editPatientVm(@Html.Raw(Newtonsoft.Json.JsonConvert.SerializeObject(this.Model))));
    });

</script>

}

您看到我在这里使用剃刀填充editPatientVm中的数据。 js 文件如下所示:

var patientVm = function (data) ...
var editPatientVm = function (data) ...
var createPatientVm = function (data) ...

这与处方相同。 现在,当我尝试将部分处方加载到屏幕的黄色部分时,我尝试这样做。这可能是非常错误的......

-- this is at the bottom of the master view --
<script type="text/javascript">
    $(document).ready(function () {
$('#tablePrescriptions').on('click', 'tr', function (event) {
               var selectedId = $(this).data("prescriptionid"); 
    // this data gets filled without troubles
               $(this).addClass('selectedrow').siblings().removeClass('selectedrow');
               openDetail("prescription", selectedId);
            });

然后是这个函数

    function openDetail(type, selectedId) {
        if (debug)
            alert(type + " : " + selectedId);

        var url = baseurl + "/Prescription/Edit?prescriptionId=" + selectedId;

        $("#mainContent").load(url);

        //CHECK THIS
        ko.cleanNode($("#mainContent")[0]);
        $("#mainContent").load(url, function () {
            //ko.applyBindings(new viewModel(), $("#mainContent")[0]);

            ko.applyBindings(new editPrescriptionVm(@Html.Raw(Newtonsoft.Json.JsonConvert.SerializeObject(new FysioNotes.WebMVC.Models.ViewModels.EditPrescriptionViewModel(12836)))), document.getElementById("mainContent"));
        });

    }

如你所见,固定数字 12836 这样做是完全错误的。但我想试试这是否可行并且确实可行。但显然我不能将 js var 发送到 razor ,因为这是不可能的......所以这让我想到我做错了什么

主视图底部有这个:

<script src="~/MyScripts/patientVm.js"></script>
<script src="~/MyScripts/prescriptionVm.js"></script>
<script>
    $(function () {
        ko.applyBindings(new masterVm(@Html.Raw(Newtonsoft.Json.JsonConvert.SerializeObject(this.Model))));
    })

</script>

我想我需要将我需要的部分视图模型放入我的主视图模型中吗?然后通过发送它,但这意味着每个视图模型都需要在主视图上。这不适合初始加载!这样做对我来说似乎是错误的,但我以前错了....

请帮忙:(

【问题讨论】:

    标签: asp.net-mvc knockout.js partials


    【解决方案1】:

    @section 脚本不能在通过 ajax 检索的局部视图中工作...您必须在首先检索视图的代码之后在这些标记之间执行代码。 @section 脚本保存在请求项中,并在呈现页面时呈现。但由于这是 ajax,服务器早已超过了它会考虑本节之间定义的脚本的地步

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-12-30
      • 2017-01-10
      • 2012-11-25
      • 1970-01-01
      • 2013-02-04
      • 1970-01-01
      • 2013-10-31
      相关资源
      最近更新 更多