0

我终于得到了选项和值的绑定,可以在我的下拉组件上工作。我现在的工作除了未执行该值的 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); 
}); 
4

1 回答 1

0

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

似乎每个下拉菜单都需要一个模型。请参阅http://knockoutjs.com/documentation/observables.html#activating_knockout上的可选参数

然后,您可以通过类似的方式将单独的模型绑定到每个下拉列表ko.applyBindings(viewModel, $('#@ddname')[0]);

我不明白这个简介试图做什么:

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

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

于 2012-08-21T22:45:25.490 回答