使用2个模型的ko.mapping时绑定不起作用

时间:2016-05-25 09:29:22

标签: javascript html knockout.js

我一直试图让一个下拉选择在一个页面上使用敲除绑定工作。当页面上只有一个并且我没有在knockout绑定插件中使用映射选项时,我设法让下拉和表正常工作。

但是当我使用映射选项时,下拉列表或表格工作不正确。我无法在网上找到任何有助于解决问题的方法。

我在这里创建了一个jsFiddle以获取更多信息:

html如下:     

BLE

和js是:

<table class="table table-striped table-bordered table-curved">
    <tr>
      <th>Name</th>
      <th>Team</th>
    </tr>
  <!-- ko foreach: History -->
  <tr>
    <td data-bind="text: Name"></td>
    <td data-bind="text: Team1"></td>
  </tr>
  <!-- /ko -->
</table>

http://jsfiddle.net/372221/vg6kf3pw/14/

任何人都可以帮我解决这个问题吗?

1 个答案:

答案 0 :(得分:4)

你的小提琴中有很多错误/错误。首先,这是一个working one

这是你的错误。

  • 没有正确设置jsfiddle。要正确设置,请在Javascript设置中选择库Knockout 3.4。之后,您不需要直接引用js文件。此外,您根本没有引用映射插件。最后,你不需要jQuery文档就绪包装,特别是当jQuery甚至没有被引用时。
  • 映射插件从对象映射到对象,默认情况下必须具有匹配的属性名称,这些属性区分大小写。因此,您必须提供GetData
  • 的正确来源
  • GetData方法没有返回类似承诺的对象,因此没有done回调。在我的版本中,我使用了一些嘲弄。
  • 由于HTML无效,ko无法处理虚拟绑定节点,因此我需要在tr标记周围添加正确的th包裹。
  • 您的绑定不正确:Team正确而不是Team1,而optionsText正确的获取者应该返回SafeName(我猜)。

<强>更新

你的更新小提琴有这些错误。

  • 几个拼错或错误的单词案例。当Dev Tools(F12)打开时,您可以在运行小提琴时看到这些基本问题。控制台将为您提供ko绑定的例外。
  • 您在调用映射之前应用了 之前的绑定。因此,这导致绑定属性在时间上未定义,因为它们是由映射插件即时创建的(这是设计原因之一,例如我为什么不使用它)。首先,您必须先致电GetHistory,然后致电ko.applyBindings
  • 在您的孩子物品中&#39;您将parent.DelayHistory传递给ko.mapping.fromJS的构造函数作为第三个参数,因此实际上插件将属性化为observableArray而不是实际项。事实上,在这种情况下,您甚至不需要parent引用(除非您的实际代码中有其他原因)。