【发布时间】: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