我正在尝试实现简单的分页,但无法弄清楚我做错了什么。
这就是我所拥有的。
search.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>
search.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个结果。当我单击下一个按钮时,会返回数据,但是出现错误。
无法解析bindings.↵Message:ReferenceError:未定义leaseID;↵Bindings值:text:leaseID“
有什么想法吗?
答案 0 :(得分:1)
我预先看到了一些问题 -
您正在将两个参数传递给executeQuery方法,第二个参数是您的成功回调 - 但您传递的是您的observable。这不应该打破你的查询,但我很好奇目的是什么。您可能只是尝试执行查询,然后在返回promise时执行querySucceeded方法 -
return manager.executeQuery(query)
.then(querySucceeded)
.fail(queryFailed);
如果未能正确退回承诺,我会得到90%的错误。
我没有看到任何应该在第一次通话中起作用而不是第二次通话。我很好奇当你在Breeze查询之外点击你的URI时会发生什么。
我强烈推荐你在你的场景中做的另一件事,或者你有任何绑定中断的时候是pre pre $ data。在你的观察中,在这种情况下是leaseID。
<ul data-bind="foreach: leases">
<li data-bind="text: $data.leaseID"></li>
</ul>
这不会解决你的应用程序中的任何问题,但它会取出其中一个变量(AKA它不会破坏你的绑定)
我注意到的另一件事是你的转储数据绑定,我做了一个快速的谷歌搜索,看到它与调试有关 - 你确定你已经设置了这个自定义绑定处理程序吗?
<div data-bind="dump: $data.leases"></div>