KnockoutJS:动态填充下拉列表

我是KnockoutJS的新手,我用dropdownlist做了简单的事情,填充和使用静态数据但是现在需要动态地执行两个事情dropdownlist

1.想要动态填充下拉列表(比如任何列表),我们可以从我的控制器获取此列表。

var InsertVal = function(name, id) { this.pname = name; this.pid = id; }; var Valuess = function() { $.ajax({ dataType: "json", url: "getParentCategory.do", success: function (data) { for(i=0;i<data.length;i++){ totalval.push(new InsertVal(data[i].parentCategoryName,data[i].parentCategoryId)); } handledata(totalval); } }); }; var handledata= function(totalval){ console.log("!!@#"+totalval); return totalval; } var obj={ parentCategory : ko.observableArray(Valuess()), chosenParentCategory : ko.observableArray() }; ko.applyBindings(obj); 

You have chosen a Parent Category .

尝试动态填充下拉列表,成功从控制器获取json数据但数据未填充。

您需要在此处解决各种问题。 你应该把obj作为一个function。 2.您需要创建其对象,然后在ko.applyBindings中使用该对象。 你没有宣布totalVal

你的代码应该像在这个jsFiddle中一样 (注意我已经评论过你的ajax调用。你可以启用它)

使用Javascript:

 var InsertVal = function (name, id) { this.pname = name; this.pid = id; }; var Valuess = function () { var totalval = []; data = [{parentCategoryName : 'Parent1', parentCategoryId: 1}, {parentCategoryName : 'Parent2', parentCategoryId: 2}, {parentCategoryName : 'Parent3', parentCategoryId: 3}]; for (i = 0; i < data.length; i++) { totalval.push(new InsertVal(data[i].parentCategoryName, data[i].parentCategoryId)); } /*$.ajax({ dataType: "json", url: "getParentCategory.do", success: function (data) { for (i = 0; i < data.length; i++) { totalval.push(new InsertVal(data[i].parentCategoryName, data[i].parentCategoryId)); } } });*/ return totalval; } var objViewModel = function() { var self = this; console.log(Valuess()); self.parentCategory = ko.observableArray(Valuess()); self.chosenParentCategory = ko.observableArray(); }; var obj = new objViewModel(); ko.applyBindings(obj); 

HTML:

 

You have chosen a Parent Category .

评论者是正确的, 文档存在,以指导您完成此操作,但这是一个基本的(阅读:不完整和不完美) 小提琴 ,让你开始:

   

 var viewModel = new (function() { var self = this; this.cars = { 'Chevy': ['Camaro', 'Spark'], 'Honda': ['Civic', 'Insight'], 'Tesla': ['Model S', 'Model X'] }; this.make = ko.observable(); this.model = ko.observable(); this.makeOptions = Object.keys(this.cars); this.modelOptions = ko.computed(function() { return this.cars[this.make()]; }, this); })(); ko.applyBindings(viewModel); 

http://jsfiddle.net/3ec7gocc/