2011-08-30 61 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对象或消息传递或某种其他机制共享该数据。