2016-03-01 169 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'。我更新了我的例子來說明。 –