У меня есть список элементов ProjectPeriod в качестве наблюдаемого массива в режиме нокаутаModel, который включает в себя количество месяцев в каждом периоде. Я хочу показать дату окончания для каждой строки в foreach. В настоящее время я использую значение ko.computed в viewModel, но я не могу перебрать каждый элемент до отображаемого элемента. Как я могу перебирать и суммировать значения, отображаемые только до текущего элемента в foreach?Как я могу получить ko.computed текущую сумму foreach при итерации через наблюдаемыйarray в 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>
и следующий ViewModel:
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)
]);
}
Я действительно просто начать работу с Knockout, поэтому я ожидаю, есть больше, чем несколько вопросов, с как я к этому приближаюсь. Но, в частности, мне нужно отобразить текущую дату окончания.
Обновление: на основе отзывов Мэтта, которые я обновил, чтобы включить наблюдаемые в ProjectPeriod, но у меня возникают проблемы с получением справки из viewModel и итерацией по массиву.
Не уверен, что вы хотите. Вы хотите, чтобы общее количество месяцев в конце каждой строки? Итак, 12 месяцев для первого ряда, 24 для второго и так далее? –
Да, по сути, это то, что мне нужно. период месяцев вводится в поля ввода. Мне нужна каждая строка, чтобы показать дату окончания. Таким образом, строка 1 может иметь 5 месяцев и periodEndDate будет startdate + 5 месяцев, строка 2 имеет 12 месяцев, а periodEndDate будет startdate + 17 месяцев. – tlbignerd