applyBindings之后的敲除选项/值绑定javascript不执行

时间:2012-08-21 18:54:43

标签: javascript data-binding knockout.js

我终于获得了对我的下拉组件工作的选项和值的绑定。我现在有什么工作,除了没有执行值的applyBinding之后的所有javascript。当我一次只在页面上有一个下拉列表时,这不是问题。

但是,大多数时候,我需要使用多个。当我在这样的页面上单步执行脚本时,它会为第一个下拉列表执行applyBinding并停止。没有进一步的脚本运行,只有第一个下拉列表工作。

这是为什么?更重要的是,我该如何解决?

以下是相关的代码行:

$(function () {      
  var $thisdd = $("#@ddname");  //the JQuery selector for my dropdown       
  var dropdownItems = getDropdownItemsFromDl("@ddname");       
  var newitem = ko.observable({ cname: ddcname, cvalue: ko.observable($thisdd.val()), cpublishtopic: "" });      
  classificationsViewModel.push(newitem());       
  var viewModel =     
    {         
      dditems : dropdownItems      
    };    
  $("#@ddname").attr("data-bind", "value: classificationsViewModel()[" + classificationsViewModel.indexOf(newitem()) + "].cvalue, options: dditems, optionsText: 'value', optionsValue: 'key'");   
  ko.applyBindings(viewModel);   
  ko.applyBindings(classificationsViewModel()[classificationsViewModel.indexOf((newitem())].cvalue); 
}); 

1 个答案:

答案 0 :(得分:0)

当您致电ko.applyBindings时,Knockout会将模型应用于整个文档。 如果整个页面都有一个模型,那就太棒了。

似乎每个下拉列表都需要一个模型。请参阅http://knockoutjs.com/documentation/observables.html#activating_knockout

上的可选参数

然后,您可以通过类似ko.applyBindings(viewModel, $('#@ddname')[0]);

的内容将每个下拉列表绑定到单独的模型中

我不明白这个模糊的目的是什么:

value: classificationsViewModel()[" + classificationsViewModel.indexOf(newitem()) + "].cvalue

您似乎正在尝试使用两种不同的模型来控制下拉列表。我相当肯定不会结束。尝试使用一个模型来统治它们来处理所有下拉列表。我认为你会发现维护和逻辑更容易。