使用foreach循环通过observableArray

时间:2016-03-01 19:22:44

标签: knockout.js

我的视图模型中有这个可观察的数组。

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 个答案:

答案 0 :(得分: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 -->

答案 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'},...]);

确保提供可观察的数组。