2011-08-30 2 views
0

내가 짓고있는 응용 프로그램은 텍스트 편집을 위해 iframe을 사용해야하며이 iframe은 viewModel에 연결해야합니다. 그러나 녹아웃과 충돌하는 것을 발견했습니다 ... 또는 적어도 녹아웃은 보이지 않습니다. 부모 개체를 통해 액세스하려고하면 바인딩을 적용하십시오. 여기 녹아웃 : iframe을 통해보기 모델에 액세스하고 있습니까?

<script type="text/javascript"> 
     $(function(){ 
      ko.applyBindings(parent.model.project, $('#root')[0]); 
     }); 
    </script> 

    <ul id="root" data-bind="template: {name: function(){return type()}, 
                      foreach: populate() }"></ul> 

    <script id="document" type="text/html"> 

     <li class="draft" draft="${draft()}" data-bind="css: {expanded: $data.expanded}"> 
      <span data-bind="click: function(){parent.model.project.expand($data, 'draft')}"> 
       ${ordinal(draft())} Draft 
       <img src="icons/close-black.png" 
        data-bind="click: function(){parent.model.project.deleteDraft($data)}, 
             css:{ only: function() {parent.model.project.drafts > 1} }"/> 
      </span> 
      <div> 
       <ul data-bind="css: {expanded: $data.expanded}, 
         template: { 
          name: 'draft', 
          foreach: $data.draftItems, 
         }" 
       > 
       </ul> 
      </div> 
     </li> 

    </script> 

    <script id="draft" type="text/html"> 
     {{if $data.name}} 
     <li class="${name}">${name}</li> 
     {{/if}} 
    </script> 

확인, 이것은 WYSIWYG 텍스트 편집기 아니지만 ... 몇 가지 코드,하지만 여전히 내 지점을 보여줍니다.

이제 내가 썼을 때 완벽하게 작동했습니다. 나는 모든 바인딩이 참조하는 viewModel 부분을 가지고 있는데,이 html에 의해서만 액세스되는 js 파일에 정의되어 있습니다 ... 그러나 부모 윈도우에서 액세스 할 수있는 동일한 ViewModel이 필요합니다. 툴바 버튼에 대한 wysiwyg 편집기와 다른 외부 컨트롤 때문에 viewModel의 해당 부분을 파일의 나머지 부분으로 정의한 파일로 옮겼습니다 ... 이제는 작동하지 않습니다!

이전에는 외부 파일에서 parent.model을 사용하여 부모보기 모델에 여전히 액세스하고 있었지만 이제는 해당 모델에 대한 직접적인 독점 액세스 권한이 없어 작동하지 않는 것 같습니다. 문제는 console.log를 사용하여 뷰 모델에 액세스 할 수 있다는 것입니다.이 뷰에서 또한 document.write를 수행 할 수 있습니다. 이벤트를 처음부터보기 시작하여 뷰 업데이트를 시작하지만 초기 뷰 이후에는 더 이상 업데이트되지 않습니다.

해결 방법이 있습니까?

+0

어떤 녹아웃 버전을 사용하고 있습니까? –

+0

버전 1.2.1을 사용하고 있었지만 지금은 1.3 베타 버전입니다. 아직도이 문제에 대한 더 나은! – cybermotron

답변

0

iframe이 부모 요소의 바인딩을 상속하지 않습니다.

iframe은 실제로 다른 페이지 내에서 별도의 페이지이므로 제대로 작동하지 않게 할 수 있습니다.

각 iframe에는 자체 뷰 모델이 있어야합니다. 해당 뷰 모델을 다른 뷰 모델에서 가져와야하는 경우 글로벌 JS 개체 또는 메시지 전달 또는 일부 다른 메커니즘을 통해 해당 데이터를 공유해야합니다.

관련 문제