2016-11-04 77 views
1

我有一個隨機日期列表,我在服務器上生成並以json格式發送回knockout 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 

等等

我明白在淘汰賽基本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"> 
..... 

或者是否有更好,更簡潔的方式來完成這與一些if語句?

+0

可能你只是過濾您的原始數組每月。使用ko.utils.arrayFilter http://www.knockmeout.net/2011/04/utility-functions-in-knockoutjs.html –

+0

感謝您的評論user2744722。我在互聯網上搜索了2天,尋找解決方案,當然在發佈這個問題後的幾分鐘裏,我遇到了這個問題:http://stackoverflow.com/questions/27163547/group-events-by-date-using-knockoutjs 我將在今晚晚些時候處理解決方案,如果這有助於解決我的問題,我會發布它,所以也許它可以幫助別人! – JPitts

回答

0

這裏是一個我沒有使用ko.utils.arrayfilter

這裏是小提琴。 https://jsfiddle.net/othkss9s/27/

這裏是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>