2013-07-29 32 views
1

我想实现简单的分页,但无法弄清楚我做错了什么。分页与淘汰赛和微风

这是我的。

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:不定义leaseID;↵Bindings值:文本的ReferenceError:leaseID”

任何想法

+0

请'console.log'在'data.results'的'querySucceeded'方法中获得什么,并用输出更新您的文章! – nemesv

+0

我纠正了。激活数据加载,然后我第一次点击下一步我得到以下错误: [Q]未处理的拒绝原因(应该是空的): 之后点击Next按钮返回数据,但到那时绑定是已经坏了。 – Cooper

回答

1

有迹象表明,我看到了前面的几个问题 -

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

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

您收到的Q错误是当承诺没有正确返回时90%的时间。

我没有看到任何应该工作的第一个电话,而不是第二个。我很好奇当你在你的Breeze查询之外击中你的URI时会发生什么。

另一件我强烈建议你在场景中做的事情,或者任何时候你有这样一个绑定中断的地方是预先安装$ data。给你的可观察的,在这种情况下是leaseID。

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

这不会解决什么是在你的应用打破,但它会取出变量(AKA它不会破坏你的绑定)

一两件事我注意到的是一你的转储数据绑定,我做了一个快速的谷歌搜索,看到它与调试有关 - 你确定你有这个自定义绑定处理程序设置?

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

删除第二个参数修复了它。我一直在查看这些代码,甚至没有注意到它。谢谢! 我确实设置了转储绑定,我不打算在这里包含它,但是复制/粘贴太多。 – Cooper