【问题标题】:Knockout JS Having models inside multiple partial viewsKnockout JS 在多个局部视图中包含模型
【发布时间】:2012-11-26 02:26:03
【问题描述】:

我正在一个页面中加载 4 个部分视图。包含单独 div 中的所有局部视图的主页,每个局部视图都有自己的淘汰模型。我遇到的问题是各个剔除模型无法绑定文本字段的值,而不能绑定。

我希望将页面分开,这样主页面就不会那么杂乱,并且与部分视图紧密耦合。这实质上是对之前完成的这 4 页的总结。

我似乎无法将淘汰模型拉出,因为它们需要来自控制器的信息来填充局部视图,而我不想将局部视图拉入此页面。

基本上我想用他们自己的淘汰模型加载部分视图并具有所需的功能。

【问题讨论】:

  • 您能否向我们展示您迄今为止尝试过的代码?

标签: asp.net-mvc-2 knockout.js partial-views knockout-2.0 knockout-mvc


【解决方案1】:

这听起来像你的情况,你会想要使用ko.applyBindings 的第二个参数。

第二个参数允许您传递要用作绑定的根元素的 DOM 元素。

因此,如果您将部分视图加载到以下元素中:

<div id="one">
...
</div>
<div id="two">
....
</div>

您可以将不同的视图模型绑定到每个容器,例如:

ko.applyBindings(oneModel, document.getElementById("one"));

ko.applyBindings(twoModel, document.getElementById("two"));

【讨论】:

  • 我已经这样做了,但它仍然没有得到我需要的东西,即能够在部分视图中应用绑定。为了清楚起见,我在部分视图中调用 ko.applybindings,因为它们包含它们的模型。
  • 那么,在填充了局部视图的内容(或内联作为局部视图的一部分)之后,您是否在没有第二个参数的情况下调用 ko.applyBindings?。如果您已经正确绑定了各个容器,那么您可能需要共享更多代码来确定绑定失败的原因。
  • 我使用第二个参数,每个模型都有自己的部分。我认为解决方案是拥有一个具有代表部分的对象的大模型,然后当创建大模型时,我使用 ajax 获取部分并将其加载到它们的 div 中,然后通过大模型中的对象引用部分
  • 这是一个选项(在容器上使用with 绑定非常有用),但也支持将绑定应用于每个容器。我仍然不太清楚你看到了什么问题。控制台中是否有错误?有示例代码吗?
【解决方案2】:

在每个局部视图中,在页面的最底部放置一些 JavaScript。

<script type="text/javascript">
    ko.applyBindings(viewModelObject, document.getElementById("someDivId")); 
</script>

这将在正确的时间应用绑定。否则,由于视图加载的异步方式,绑定将不起作用。

注意:viewModelObject应该定义在主视图中,以及一般的ko包含文件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-04
    • 1970-01-01
    相关资源
    最近更新 更多