Javascript 循环遍历淘汰中的日期,并按月创建一组日期
我在服务器上生成了一个随机日期列表,并将其以json格式发送回一个敲除型viewmodel到observableArray()([01/02/2016,01/15/2016,02/04/2016,03/05/2016,等等…)中,我无法完全理解如何迭代这些日期并以html创建以下输出:Javascript 循环遍历淘汰中的日期,并按月创建一组日期,javascript,knockout.js,Javascript,Knockout.js,我在服务器上生成了一个随机日期列表,并将其以json格式发送回一个敲除型viewmodel到observableArray()([01/02/2016,01/15/2016,02/04/2016,03/05/2016,等等…)中,我无法完全理解如何迭代这些日期并以html创建以下输出: January ------- 01/02/2016 01/15/2016 February ------- 02/04/2016 March ------- 03/05/2016 等等 我了解knocko
January
-------
01/02/2016
01/15/2016
February
-------
02/04/2016
March
-------
03/05/2016
等等
我了解knockout中的基本foreach循环,以及动态输出html等等。最好的做法是为每个月创建一个可观察数组,然后在html中仅显示月份部分(如果该月的可观察数组长度>0)
var januaryArray = ko.observableArray();
var februaryArray = ko.observableArray();
<ul id="januaryList" data-bind="foreach: januaryArray, visible: januaryArray.length > 0">
.....
<ul id="februaryList" data-bind="foreach: februaryArray, visible: februaryArray.length > 0">
.....
var januaryArray=ko.observableArray();
var februaryArray=ko.observableArray();
.....
.....
或者有没有更好、更简洁的方法用一些if语句来实现这一点?下面是我使用ko.utils.arrayfilter做的一个例子 这是小提琴 下面是javascript
function model() {
var self = this;
this.dates = ['01/02/2016', '01/15/2016', '02/04/2016', '03/05/2016'];
this.months = ko.observableArray([{
name: 'January',
value: '01'
}, {
name: 'February',
value: '02'
}, {
name: 'March',
value: '03'
}]);
this.filteredDates = function(data) {
return ko.utils.arrayFilter(self.dates, function(item) {
return item.substr(0, 2) === data.value;
});
};
}
var myViewModel = new model();
$(document).ready(function() {
ko.applyBindings(myViewModel);
});
这是html
<ul data-bind="foreach: months">
<li>
<b data-bind="text: $data.name"></b>
<ul data-bind="foreach: $root.filteredDates($data)">
<li>
<b data-bind="text: $data"></b>
</li>
</ul>
</li>
</ul>
-
-
下面是我使用ko.utils.arrayfilter做的一个
这是小提琴
下面是javascript
function model() {
var self = this;
this.dates = ['01/02/2016', '01/15/2016', '02/04/2016', '03/05/2016'];
this.months = ko.observableArray([{
name: 'January',
value: '01'
}, {
name: 'February',
value: '02'
}, {
name: 'March',
value: '03'
}]);
this.filteredDates = function(data) {
return ko.utils.arrayFilter(self.dates, function(item) {
return item.substr(0, 2) === data.value;
});
};
}
var myViewModel = new model();
$(document).ready(function() {
ko.applyBindings(myViewModel);
});
这是html
<ul data-bind="foreach: months">
<li>
<b data-bind="text: $data.name"></b>
<ul data-bind="foreach: $root.filteredDates($data)">
<li>
<b data-bind="text: $data"></b>
</li>
</ul>
</li>
</ul>
-
-
您能否每月只筛选原始阵列。使用ko.utils.arrayFilter感谢用户2744722的评论。我在互联网上搜索了两天,寻找解决方案。当然,在发布此问题的几分钟后,我遇到了这样一个问题:我将在今晚晚些时候制定一个解决方案,如果这有助于解决我的问题,我将我会发布它,这样也许它可以帮助其他人!你能每月只过滤你的原始数组吗?使用ko.utils.arrayFilter感谢用户2744722的评论。我在互联网上搜索了两天,寻找解决方案,当然在发布这个问题几分钟后,我遇到了这样一个问题:今晚晚些时候我将研究一个解决方案,然后如果这有助于解决我的问题,我会张贴它,这样也许它可以帮助别人!