1

我是 Durandal 的新手,现在已经玩了几个小时了。这似乎很有希望 - 但现在我遇到了一个问题,我无法弄清楚 - 并且无法通过 Google 找到解决方案。

我有一个包含三个数据表的视图——creditCardLines、cashLines 和drivingReimbursementLines。他们从三个不同的数据源获取数据——用户可以向 cashLines 和drivingReimbursementLines 添加新行(省略表格)。

问题:在视图模型中,我可以轻松地将数据列表绑定到第一个 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>
4

2 回答 2

2

这就是我在视图模型中处理多个 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
    });

如果您不想要它们,则不需要它们,但是如果您正在做任何复杂的事情,我认为拥有它们会更整洁。

于 2013-04-11T08:11:30.527 回答
1

你应该看看 BreezeJS。它可以选择进行一次 Ajax 调用以提取多个查找。

查看 BreezeJS 文档以获得详细说明:http ://www.breezejs.com/documentation/lookup-lists

于 2013-04-16T03:42:03.833 回答