Data binding Durandal中的多发性foreach

Data binding Durandal中的多发性foreach,data-binding,knockout.js,foreach,durandal,Data Binding,Knockout.js,Foreach,Durandal,我对杜兰达尔都是新手,已经玩了几个小时了。这看起来很有希望——但现在我遇到了一个问题,我无法解决——也无法用谷歌找到解决方案 我看到了三个数据表——信用卡额度、现金额度和驾驶报销额度。它们从三个不同的数据源获取数据,用户可以向现金行和驱动报销行(不包括表单)添加新行 问题:在viewmodel中,我可以轻松地将数据列表绑定到第一个foreach,但我无法确定如何将数据绑定到第二个和第三个 在activate函数中,我对我的服务器API进行ajax调用,以获取第一个foreach的数据,然后在完成

我对杜兰达尔都是新手,已经玩了几个小时了。这看起来很有希望——但现在我遇到了一个问题,我无法解决——也无法用谷歌找到解决方案

我看到了三个数据表——信用卡额度、现金额度和驾驶报销额度。它们从三个不同的数据源获取数据,用户可以向现金行和驱动报销行(不包括表单)添加新行

问题:在viewmodel中,我可以轻松地将数据列表绑定到第一个foreach,但我无法确定如何将数据绑定到第二个和第三个

在activate函数中,我对我的服务器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;
});
视图:


信用卡额度
现金额度
驾驶报销线路

这就是我在视图模型中处理多个jQuery延迟调用的方式:

return $.when(
        $.get('/submit/GetCreditCardLines'),
        $.get('/submit/GetCashLines'),
        $.get('/submit/GetReimbursementLines'))
    .then(function (creditCardLines, cashLines, reimbursementLines)
    {
        processCreditCardLines(creditCardLines);
        processCashLines(cashLines);
        processReimbursementLines(reimbursementLines);
    })
    .fail(function (status)
    {
        // Do whatever you need to if it fails
    });

如果你不想要过程方法,你不需要它们,但是如果你正在做任何复杂的事情,我认为拥有它们更整洁。

你应该看看BreezeJS。它有一个选项,可以进行一个Ajax调用来获取多个查找


查看BreezeJS文档以获得详细解释:

您是否可以设置它,使每个“流程”方法链接到相应的$。使用
获取,然后使用
-而不是将它们组合到单个
中,然后使用
?您可以这样做,但如果您这样做,所有三个调用将同时触发,当这三个人都回来的时候,它会处理这个过程,所以理论上,它应该更快。实际上,我只是改变了我的代码,这样做,而不是链接请求!但是是的,如果你愿意的话,你可以把它们锁起来。我明白了。我想的是这样链接它:
return$.when($.get().then(),$.get().then(),$.get().then()).fail()应该允许每个调用独立于其他调用运行(假设它们彼此不依赖)。假设一个调用返回数据很快,但需要一段时间来处理-这样,处理过程可以在数据返回后立即进行。如果您正在寻找更快的解决方案,那么我所说的是,在大多数情况下,瓶颈将是通过网络获取数据。当链接它们时,每个Ajax调用只有在最后一个调用完成时才开始。如上所述,将尽快启动所有调用(在浏览器允许的同时http连接数的限制范围内)。两个都试试,看看哪一个在网络上对你来说更快。谢谢-正是我所需要的:-)
return $.when(
        $.get('/submit/GetCreditCardLines'),
        $.get('/submit/GetCashLines'),
        $.get('/submit/GetReimbursementLines'))
    .then(function (creditCardLines, cashLines, reimbursementLines)
    {
        processCreditCardLines(creditCardLines);
        processCashLines(cashLines);
        processReimbursementLines(reimbursementLines);
    })
    .fail(function (status)
    {
        // Do whatever you need to if it fails
    });