我终于获得了对我的下拉组件工作的选项和值的绑定。我现在有什么工作,除了没有执行值的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);
});
答案 0 :(得分:0)
当您致电ko.applyBindings
时,Knockout会将模型应用于整个文档。
如果整个页面都有一个模型,那就太棒了。
似乎每个下拉列表都需要一个模型。请参阅http://knockoutjs.com/documentation/observables.html#activating_knockout
上的可选参数然后,您可以通过类似ko.applyBindings(viewModel, $('#@ddname')[0]);
我不明白这个模糊的目的是什么:
value: classificationsViewModel()[" + classificationsViewModel.indexOf(newitem()) + "].cvalue
您似乎正在尝试使用两种不同的模型来控制下拉列表。我相当肯定不会结束。尝试使用一个模型来统治它们来处理所有下拉列表。我认为你会发现维护和逻辑更容易。