2012-11-19 47 views
1

迭代通過observablearray我有一個ProjectPeriod項目列表作爲observableArray在淘汰賽viewModel其中包括每個時期的月數。我想在foreach中顯示每行的結束日期。目前,我在viewModel中使用了ko.computed值,但我無法循環顯示每個項目直到顯示的項目。我怎樣才能遍歷和總結顯示的值直到當前項目的foreach?我如何檢索ko.computed運行總和的foreach時,通過knockout.js

目前我有以下HTML:

<table> 
    <tr class="tableHeader"> 
     <th>Period</th> 
     <th>Number of Months</th> 
     <th>End of Period</th> 
    </tr> 
    <tbody data-bind="foreach: ProjectPeriod"> 
     <tr> 
      <td><input data-bind="value: ProjectYearText" /></td> 
      <td><input data-bind="value: PeriodMonths" /></td> 
      <td data-bind="text: endDate"></td> 
     </tr> 
    </tbody> 
</table> 

及以下視圖模型:

function ProjectPeriod(projectYearId, projectYearText, periodMonths, viewModel) { 
    var self = this; 
     self.ProjectYearId = projectYearId; 
     self.ProjectYearText = ko.observable(projectYearText); 
     self.PeriodMonths = ko.observable(periodMonths); 
     self.viewModel = viewModel; 

     self.endDate = ko.computed(function() { 
      var startDate = hfProjectDates.Get("ProjectStartDate"); 

      // Calculate the number of months from the beginning to the current period. 
      var monthCount = 0; 
      ko.utils.arrayForEach(self.viewModel.ProjectPeriods(), function (projectPeriod) { 
       if (projectPeriod.ProjectYearId < self.ProjectYearId) 
        monthCount += projectPeriod.PeriodMonths; 
       }); 

      var endDate = moment(startDate).add('M', monthCount); 
      return endDate ? endDate.format("M/DD/YYYY") : "None"; 
     }); 
    } 

    function ProjectPeriodViewModel() { 
     // Data 
     var self = this; 

     self.ProjectPeriods = ko.observableArray([ 
      new ProjectPeriod(1, "1st Year", 12, ProjectPeriodViewModel), 
      new ProjectPeriod(2, "2nd Year", 12, ProjectPeriodViewModel), 
      new ProjectPeriod(3, "3rd Year", 12, ProjectPeriodViewModel) 
     ]); 

    } 

我真的剛開始接觸淘汰賽,所以我希望有以上幾個問題進行我正在接近這一點。但具體而言,我需要得到運行結束日期來顯示。

更新:基於馬特的反饋我已經更新,包括在ProjectPeriod中的observable,但我遇到了從viewModel獲取引用並遍歷數組的問題。

+0

不知道你想要什麼。你想在每一行的結尾處累計月數嗎?因此,第一排的12個月,第二排的24個等等? –

+0

是的,基本上這就是我需要的。在輸入框中輸入月份的時間段。我需要每一行來顯示結束日期。因此,第1行可能有5個月,periodEndDate將爲startdate + 5個月,第2行有12個月進入,periodEndDate將爲startdate + 17個月。 – tlbignerd

回答

0

有幾個方法可以解決這個,我可能會做的是計算財產移至ProjectPeriod對象本身,也給了ProjectPeriodProjectPeriodViewModel,這樣的引用,則ProjectPeriod就能訪問ProjectPeriods並向後計算加起來的所有期間(可能是爲每個期間指定一個索引屬性以使其更簡單)的想法。

+0

我開始走下這條路。我已經有一個我可以枚舉的Id,但一直卡在如何添加對ProjectPeriodViewModel的引用。你有這樣一個例子嗎? – tlbignerd

+0

@tlbignerd:我想你已經根據你最後一次編輯了。我只是將'ProjectPeriodViewModel'作爲參數傳遞給構造函數。你的問題可能在這裏'ko.utils.arrayForEach(viewModel.ProjectPeriods()...'不應該是'self.viewModel.ProjectPeriods()'? –

+0

我以爲我也很親密。 .viewModel,並在構造函數中傳遞了ProjectPeriodVewModel(最初我使用self作爲參數)當我運行這個時,我收到錯誤:Object不支持屬性或方法'ProjectPeriods' – tlbignerd