Я все новичок в Durandal и сейчас играю с ним в течение нескольких часов. Это кажется очень многообещающим - но теперь у меня возникла проблема, я не могу понять - и не могу найти решение с Google.Несколько foreach в Дюрандале
У меня есть вид с тремя таблицами данных - creditCardLines, cashLines и drivingReimbursementLines. Они извлекают данные из трех разных источников данных - и пользователь может добавлять новые строки в cashLines и вождение ReimbursementLines (исключая формы).
Проблема: В модели просмотра я могу легко привязать список данных к первому foreach - но я не могу понять, как привязать данные ко второму и третьему.
В функции активирования я делаю ajax-вызов для моего API-интерфейса сервера, чтобы получить данные для первого foreach, а затем возвращает обещание, когда это завершается. Как мне получить данные для второго и третьего foreach здесь?
ViewModel:
define(function() {
var submit = function() {
this.displayName = 'Expenses';
this.creditCardLines = ko.observableArray();
var me = this;
this.activate = function() {
return $.get('/submit/GetCreditCardLines').then(function (creditCardLines) {
me.creditCardLines(creditCardLines.Data);
});
};
};
return submit;
});
Вид:
<section>
<h2 data-bind="html:displayName"></h2>
<h3>CreditCard lines</h3>
<table class="table">
<tbody data-bind="foreach: creditCardLines">
<tr>
<td class="date" data-bind="text: Date"></td>
<td data-bind="text: Description"></td>
<td data-bind="text: Amount"></td>
<td><input type="checkbox" data-bind="checked: ApprovedEmployee" /></td>
</tr>
</tbody>
</table>
<h3>Cash lines</h3>
<table class="table">
<tbody data-bind="foreach: cashLines">
<tr>
<td class="date" data-bind="text: Date"></td>
<td data-bind="text: Description"></td>
<td data-bind="text: Amount"></td>
</tr>
</tbody>
</table>
<!-- TODO: Generate form to add new lines -->
<h3>Driving reimbursement lines</h3>
<table class="table">
<tbody data-bind="foreach: drivingReimbursementLines">
<tr>
<td class="date" data-bind="text: Date"></td>
<td data-bind="text: Description"></td>
<td data-bind="text: Distance"></td>
<td data-bind="text: Rate"></td>
<td data-bind="text: Amount"></td>
</tr>
</tbody>
</table>
<!-- TODO: Generate form to add new lines -->
<!-- Approve and save all lines as a quote with lines -->
<input type="submit" value="Submit quote" />
</section>
Не могли бы вы установить его таким образом, что каждый метод «процесс» прикован к его соответствующим $ .get с 'затем' - вместо того, чтобы объединить их в один «то»? –
Вы можете, но если вы сделаете это так, все три вызова будут уволены одновременно, и он обработает тогда, когда все три вернутся, поэтому теоретически это будет быстрее. Я на самом деле только что изменил свой код, чтобы сделать это так, а не связывать запросы! Но да, вы можете связать их, если хотите. –
Я вижу. То, что я думал, было следующим образом: «return $ .when ($ .get(). Then(), $ .get(). Then(), $ .get(). Then()) .fail(); 'Это должно позволить каждому вызову работать независимо от другого (при условии, что они не зависят друг от друга). Скажем, один вызов быстро возвращает данные, но требует времени для обработки - таким образом обработка может быть получена сразу же после возвращения данных. –