我正在尝试使用knockout将下拉列表绑定到选项列表的observableArray。据我所知,我已经按照我发现的例子,但它没有用。以下是我的代码的相关部分。这是在MVC应用程序的cshtml文件中,所以你会在那里看到一些Razor语法。
$(function () {
var $thisdd = $("#@ddname"); //the JQuery selector for my dropdown
var dropdownItems = new ko.observableArray();
dropdownItems = getDropdownItemsFromDl("@ddname");
var newitem = ko.observable({ cname: ddcname, cvalue: ko.observable($thisdd.val()), cpublishtopic: "" });
classificationsViewModel.push(newitem());
$thisdd.attr("data-bind", "options: dropdownItems, optionsText: function(item) { return item.value; }, optionsValue: function(item) { return item.key; }, value: classificationsViewModel()[" + classificationsViewModel.indexOf(newitem()) + "].cvalue ");
ko.applyBindings(newitem);
});
在调用getDropdownItemsFromDl之后,dropdownItems在Chrome调试监视窗口中显示如下:
dropdownItems(): Array[14]
0: Object
key: "0"
value: "none"
__proto__: Object
1: Object
key: "1"
value: "Equity Portfolio"
__proto__: Object
2: Object
key: "2"
value: "Fixed Income Portfolio"
__proto__: Object
3: Object
4: Object
5: Object
6: Object
7: Object
8: Object
9: Object
10: Object
11: Object
12: Object
13: Object
length: 14
__proto__: Array[0]
classificationsViewModel是一个ko.observableArray。 cvalue是该数组中对象的ko.observeable属性。
下拉选项列表最后只有“无”,即数组中的第一项。 我的绑定属性有什么问题?
答案 0 :(得分:0)
我让它工作 AS LONG AS 对值的绑定是最后一个脚本行。 ko.applyBinding行之后的任何javascript都不会被执行!我将创建另一个问题来解决这个问题,因为这对我的应用程序来说是一个严重的问题。
请注意,我最终使用的是viewModel。我无法直接绑定到observableArray工作。
还要注意value:在data-bind属性中的选项前面。当我有价值时:作为属性的最后一部分,选项绑定不起作用。
以下是我的代码“工作”的相关行。
$(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);
});
我希望这个“答案”可以帮助其他人解决这个问题。