2013-03-25 51 views
0

我刚开始使用knockoutjs。我尝试使用knockout data-bind属性绑定select选项值,但不能将数组值作为不同的选项获取。 它将填充为昏迷分离。 我附上了我tryied的示例代码。我希望其他人也会面临同样的奇怪错误。knockoutjs select data-bind binding is given unexpected result

self.availableStates = new Array(); 
for (var i=0;i<self.allStates.length;i++) 
{ 
if (self.allStates[i]['name'] != null) 
self.availableStates.push(self.allStates[i]['name']) 
} 
self.availableStates = ko.observableArray([self.availableStates]); 

期待的结果:

<select id="drpDwnLst" data-bind="options: availableStates"> 
    <option value="">State4</option> 
    <option value="">State3</option> 
    <option value="">State2</option> 
    <option value="">State1</option> 
</select> 

实际结果

<select id="drpDwnLst" data-bind="options: availableStates"> 
    <option value="">State4,State3,State2,State1</option> 
</select> 

回答

1

你在输出看到的是一个阵列上调用toString()的效果。

你得到这样的结果,因为你availableStates已经是一个数组,这样你就不需要与[]

再次把它包装到一个数组所以,你需要这样写:

self.availableStates = ko.observableArray(self.availableStates); 

虽然很奇怪,你如何覆盖你的self.availableStates定义...

+0

谢谢你现在工作...你的第二点我没有得到你..? – 2013-03-25 11:26:30

+0

在你的示例中,你定义了'self.availableStates = new Array();'然后用'self.availableStates = ko.observableArray(self.availableStates)'覆盖它。 'observableArray'还实现了大部分的数组函数,所以你可以编写例如'self.availableStates = new observableArray(); self.availableStates.push(“State1”);' – nemesv 2013-03-25 11:29:22

+0

好吧,我会尝试你建议的方式。 :) – 2013-03-25 11:32:47

相关问题