2012-07-27 128 views
1

我遇到了一个问题,使用敲除和窗体并获取绑定应用而不抛出错误。敲除嵌套绑定

我想为形式逻辑分成几个视图模型,但我得到的错误,在不被发现的酒吧和FOOS绑定,当我尝试绑定foobar的

我试图显示此在下面的例子中。

有没有办法达到理想的行为?有没有办法将三种视图模型中的所有绑定合并,然后将它们分配给foobar?

bars_observable是在barViewModel的构造器中创建的ko.observable。

<div id="foobar"> 
    <form data-bind="with: newFooBar, submit: submitFooBar"> 
     <section id="bars"> 
      <div data-bind="text: bars_observable"></div> 
     </section> 

     <section id="foos"> 
      foo stuff 
     </section> 
    </form> 
</div> 
<script type="text/javascript"> 
    $(function() { 
     var foobarViewModel, fooViewModel, barViewModel; 

     foobarViewModel = new ViewModels.FoobarViewModel({ 
      fooViewModel: new ViewModels.FooViewModel({}), 
      barViewModel: new ViewModels.BarViewModel({}) 
     }); 

     ko.applyBindings(foobarViewModel, document.getElementById("foobar")); 
    }); 
</script> 

错误是

"Uncaught Error: Unable to parse bindings. Message: ReferenceError: bars_observable is not defined;" 
+1

在您的标记“有:newFooBar”应该是“用:fooViewModel”,而且你需要在你的基础模型(FoobarViewModel)一个“submitFooBar”函数,该函数提交工作。 – Arbiter 2012-07-27 15:06:13

+0

@尼尔你可以在小提琴中发布你的代码。看到你的视图模型是调试这类问题所必需的。 – Tyrsius 2012-07-27 16:07:10

回答

1

我会建议把fooViewModel和barViewModel对象到FoobarViewModel。在这种情况下,您只需调用一次ko.applyBindings。

<div id="foobar"> 
    <form data-bind="with: newFooBar, submit: submitFooBar"> 
     <section id="bars" data-bind="with: barViewModel"> 
      <div data-bind="text: bars_observable"></div> 
     </section> 

     <section id="foos" data-bind="with: forViewModel"> 
      foo stuff 
     </section> 
    </form> 
</div> 


<script type="text/javascript"> 
    $(function() { 
     var foobarViewModel = new ViewModels.FoobarViewModel({}); 
     ko.applyBindings(foobarViewModel, document.getElementById("foobar")); 
    }); 

    function ViewModels.FoobarViewModel() { 
     var self = this; 
     self.fooViewModel = new ViewModels.FooViewModel({}); 
     self.barViewModel = new ViewModels.BarViewModel({}); 
     ... 
    } 
</script> 
+0

嗨,我试了这个,并相应地更新了我的问题,foo和bar viewmodels的绑定没有被拾取 – Neil 2012-07-27 14:36:39

+0

尝试将数据绑定属性添加到这些部分。看到我更新的帖子。 – 2012-07-27 14:43:06

+0

谢谢,这个窍门,我能够让视图模型都做自己的部分 – Neil 2012-07-30 10:45:39

1

如果您正在编写模块化系统,则可能无法创建顶级视图模型。在淘汰赛2.0中,您可以告诉淘汰赛在某个点停止解析绑定。然后,您可以再次拨打applyBindings作为容器。这里有一篇文章解释了如何去做。

http://www.knockmeout.net/2012/05/quick-tip-skip-binding.html