2016-03-01 174 views
0

我在我的视图模型中有这个可观察数组。使用foreach循环遍历一个observableArray

this.months = ko.observableArray(['Jan', 'Feb', 'Mar',...]); 

如果我尝试每个月来显示,这样的 -

<!-- ko foreach: { data: months, as: 'month' } --> 
<span data-bind="text: month"></span>   
<!-- /ko --> 

它抛出一个错误 -

Uncaught ReferenceError: Unable to process binding "text: function(){return month }" 
Message: month is not defined 

如果我试试这个,

<!-- ko foreach: months --> 
<span data-bind="text: $data"></span> 
<!-- /ko --> 

它显示[对象对象]

我在做什么错?

谢谢。

回答

2

我不知道你在做什么错,但这工作正常。看起来你的months不是你想象的那样。

vm = {}; 
 

 
vm.months = ko.observableArray(['Jan', 'Feb', 'Mar']); 
 

 
ko.applyBindings(vm);
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.2.0/knockout-min.js"></script> 
 
<!-- ko foreach: {data: months, as: 'month'} --> 
 
<span data-bind="text: month"></span> 
 
<!-- /ko -->

+0

不知道我做错了什么。我删除了与页面相关的所有敲除信息,并逐一添加回去。现在它起作用了。 – user471317

+1

当我发生这种事时,我讨厌它。 –

0
`<span data-bind="text: month"></span>` 

希望您能提供数据与财产一个月。但你的是字符串数组,因此它会抛出错误。淘汰赛正在寻找在该阵列中可观察的月份。

正如罗伊所说,下面应该有效。

<!-- ko foreach: {data: months, as: 'month'} --> 
<span data-bind="text: $data"></span> 
<!-- /ko --> 

或者你可以改变你观察到的阵列,以提供可观察数据与一个月财产。

months = [{month:'jan'}, {month:'Feb'}, {month:'Mar'},...]); 

确保您提供可观察的数组。

+1

'as:'month''允许您使用'month'而不是'$ data'。我更新了我的例子来说明。 –