2014-08-29 2 views
0

안녕하세요, 동료 프로그래머 님knockout + partials + mvc + 올바른 바인딩 방법

나는 피클에 빠져 들었습니다. 필자는 지금 2 주 동안 knockout에 있었고 인스턴트 메신저 나는 그것의 기본적인 생각을 이해하지 못한다. 그러니 나와 친하게 지내십시오.

상황 :

나는 간단하게 할 수있는 마스터 뷰 레이아웃 페이지/주인을 얻었다. 여기에 2 열 레이아웃이 있습니다. 왼쪽에 환자가있는 목록 상자를 클릭하면, 그 아래에있는 목록 상자에 처방전이 추가됩니다. 아주 간단합니다 ...

enter image description here

그나마 마음 여기에 renderbody,이 문제가있는 것입니다. 이 이미지를 사용하여 큰 부분 2 개를 봅니다. 빨간색과 노란색.

이제 나는 주인님을 잘 보았습니다. 환자를 클릭하면 화면의 노란색 부분에 특정 부분보기를로드하려고합니다. 처방전을 클릭하는 것과 마찬가지로, 노란색 부분에 처방전 부분을 적재하고 싶습니다.

나는이 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) ... 

처방전과 동일합니다. 이제 처방전 부분을 화면의 노란색 부분에로드하려고 할 때 이렇게하려고합니다. 그리고 이것은 당신이 볼처럼 고정 된 수의 12836 이런 식으로 그것을 할 완전히 잘못된 것입니다 .... 아마

-- 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")); 
     }); 

    } 

. 하지만이 방법이 효과가 있다면 시도해보고 싶었습니다.

<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> 
:하지만 Apparantly 히 나는 그래서이

마스터 뷰는 하단에있는이있다 완전히 뭔가 잘못하고 메신저 생각에 저를 보자 ....이 불가능하기 때문에, 면도기에 JS의 VAR을 보내 질수

나는 부분 모델에서 주인의 뷰 모델에 필요한 뷰 모델을 넣어야한다고 생각하십니까? 그런 다음 물마루를 보냅니다. 그러나 이것은 모든 뷰 모델이 마스터에 있어야 함을 의미합니다. 이것은 초기 로딩에 좋지 않습니다! 그리고 이것은

가 :(

답변

0

@section 스크립트가 아약스를 통해 검색됩니다 파셜 뷰에서 작동하지 않을 수 있습니다 도와주세요 .... 이런 식으로 그것을 할 수 있지만 잘못 이전 된 필자 나에게 잘못된 것 같습니다 ...먼저보기를 검색하는 코드 다음에 태그 사이에서 코드를 실행해야합니다. @section 스크립트는 요청 항목에 보관되고 페이지가 렌더링 될 때 렌더링됩니다. 그러나 이것은 아약스이기 때문에 서버는이 섹션 사이에 정의 된 스크립트를 고려하여 오랫동안 그 지점을 통과했습니다.