【问题标题】:paging with knockout and breeze淘汰赛和微风寻呼
【发布时间】:2013-07-29 18:31:12
【问题描述】:

我正在尝试实现简单的分页,但不知道我做错了什么。

这就是我所拥有的。

搜索.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;

datacontext.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"

有什么想法吗?

【问题讨论】:

  • console.logdata.resultsquerySucceeded 方法中得到什么,并使用输出更新您的帖子!
  • 我的立场是正确的。激活时加载数据,然后第一次单击下一步时出现以下错误:[Q] 未处理的拒绝原因(应为空):单击下一步按钮后返回数据,但此时绑定已损坏。跨度>

标签: knockout.js breeze single-page-application durandal


【解决方案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-30
  • 2023-04-05
  • 2014-01-14
  • 2014-04-11
  • 2013-09-08
  • 1970-01-01
  • 2014-07-31
  • 2023-03-04
  • 2012-11-19
相关资源
最近更新 更多