1

我正在尝试实现简单的分页,但无法弄清楚我做错了什么。

这就是我所拥有的。

搜索.html

<ul data-bind="foreach:leases">
    <li data-bind="text: leaseID"></li>
</ul>

<button class="btn" data-bind="click: next">Next</button>

<div data-bind="dump: $data.leases"></div>

搜索.js

var currentPage = ko.observable();
var totalPages = ko.observable();
var totalRecords = ko.observable();
var leases = ko.observableArray();


//#region Internal Methods
activate = function() {
    currentPage(0);
    return datacontext.getLeases(leases, totalPages, totalRecords, currentPage);

},

next = function() {
    currentPage(currentPage() + 1);
    return datacontext.getLeases(leases, totalPages, totalRecords, currentPage);
},

vm = {
    activate: activate,
    leases: leases,
    title: 'Hi there',
    next: next
};

return vm;

数据上下文.js

var getLeases = function (leasesObservable, totalpages, totalrecords, currentPage) {
        var query = entityQuery.from('Leases')
            .skip(currentPage() * 5).take(5)
            .orderByDesc("leaseID")
            .inlineCount(true);

        return manager.executeQuery(query, leasesObservable)
            .then(querySucceeded)
            .fail(queryFailed);

        function querySucceeded(data) {
            if (leasesObservable) {
                leasesObservable(data.results);
                totalpages(Math.ceil(data.inlineCount / 5));
                totalrecords(data.inlineCount);
            }
        }
    };

我激活中的调用工作正常,并显示前 5 个结果。当我单击下一个按钮时,数据被返回但我得到一个错误。

无法解析绑定。↵消息:ReferenceError:leaseID 未定义;↵绑定值:文本:leaseID"

有任何想法吗?

4

1 回答 1

1

我预先看到了一些问题-

您将两个参数传递给 executeQuery 方法,第二个参数是您的成功回调 - 但您将其传递给您的 observable。这不应该破坏您的查询,但我很好奇目的是什么。您可能只是尝试执行查询,然后在返回您的承诺时执行 querySucceeded 方法 -

return manager.executeQuery(query)
        .then(querySucceeded)
        .fail(queryFailed);

你得到的 Q 错误是我在 90% 的情况下没有正确返回承诺时得到的。

我没有看到任何应该在第一次调用而不是第二次调用的东西。我很好奇当您在 Breeze 查询之外点击 URI 时会发生什么。

我强烈建议您在您的场景中或任何时候遇到这样的绑定中断时做的另一件事是预先添加 $data。到您的 observable,在本例中为leaseID。

<ul data-bind="foreach: leases">
    <li data-bind="text: $data.leaseID"></li>
</ul>

这不会修复您的应用程序中出现的任何问题,但它会删除其中一个变量(也就是它不会破坏您的绑定)

我注意到的另一件事是您的转储数据绑定,我在 Google 上进行了快速搜索,发现它与调试有关 - 您确定您设置了这个自定义绑定处理程序吗?

<div data-bind="dump: $data.leases"></div>
于 2013-07-30T03:20:03.453 回答