2011-08-30 63 views
0

我正在構建的應用程序需要使用iframes進行wysiwyg文本編輯,並且這些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> 

OK,這是不是一個所見即所得的文本編輯器,但它仍然說明了我的觀點。

現在的事情是,當我寫這個它完美的工作。我有viewModel的一部分,所有的綁定引用定義在一個js文件只能通過這個html訪問...但我需要相同的ViewModel訪問父窗口,因爲我會用一個wysiwyg編輯器的工具欄按鈕和其他的外部控件,所以我將viewModel的那部分移動到其中定義其餘部分的文件中,現在它不起作用!

在我以前的外部文件中,我仍然使用parent.model訪問父視圖模型,但現在沒有對該模型的直接獨佔訪問,它似乎不工作。問題是,雖然我可以通過console.log訪問視圖模型,但是我也可以從中讀取document.write,它將事件觸發回viewModel,並且我的視圖最初會更新,但是在初始化之後它不再更新。

有沒有辦法解決這個問題?

+0

您使用的是哪種版本的淘汰賽? –

+0

我使用的是1.2.1版本,但現在我進入了1.3測試版。它仍然沒有更好的這個問題! – cybermotron

回答

0

iframes不會從父元素繼承綁定。

你不能以這種方式工作,因爲iframe實際上是另一頁中的單獨頁面。

每個iframe都需要有自己的視圖模型。如果該視圖模型需要來自另一個視圖模型,則需要通過全局JS對象或消息傳遞或某種其他機制共享該數據。