我都是Durandal的新手,现在已经玩了几个小时了。它看起来非常有前途 - 但现在我遇到了一个问题,我无法弄清楚 - 并且找不到Google的解决方案。Durandal中的多个foreach
我有三张数据表 - creditCardLines,cashLines和drivingReimbursementLines。他们从三个不同的数据源获取数据 - 用户可以将新行添加到cashLines和drivingReimbursementLines(省略表单)。
问题:在viewmodel中,我可以轻松地将数据列表绑定到第一个foreach - 但我无法弄清楚如何将数据绑定到第二个和第三个。
在激活函数中,我对服务器API进行ajax调用以获取第一个foreach的数据 - 然后在完成时返回承诺。我如何获得第二和第三个foreach的数据?
视图模型:
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>
你能设定,让每一个“过程”方法被链接到其相应的$不用彷徨与'then' - 而不是将它们组合成一个'然后'? – 2013-04-11 20:50:39
你可以,但如果你这样做,所有三个电话都会同时被触发,当三个电话都回来时它会处理,所以它理论上应该更快。实际上我只是改变了我的代码,而不是链接请求!但是,是的,如果你愿意,你可以把它们连起来。 – 2013-04-11 20:59:09
我明白了。我在想的就是像这样链接它:'return $ .when($ .get()。then(),$ .get()。then(),$ .get()。then()).fail ();'这应该允许每个调用独立于另一个调用(假设它们不依赖于其他调用)。说一个调用很快就会返回数据,但是需要一段时间才能处理 - 这样,只要返回数据,处理就可以完成。 – 2013-04-12 00:55:48