2013-07-29 3 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); 
      } 
     } 
    }; 

Звонок в моем Activate работает отлично, и отображаются первые 5 результатов. Когда я нажимаю на следующую кнопку, данные возвращаются, но я получаю сообщение об ошибке.

Невозможно разобрать bindings.↵Message: ReferenceError: leaseID не определен, значение ↵Bindings: Текст: leaseID»

Любые идеи

+0

Пожалуйста, 'console.log', что вы получаете в методе' querySucceeded' в 'data.results' и обновляете сообщение своим выходом! – nemesv

+0

Я стою исправлены. Загрузка данных при активизации, то при первом нажатии следующего появляется следующее сообщение об ошибке: [Q] Необработанные причины отказа (должны быть пустыми): После этого нажатие на кнопку «Далее» возвращает данные, но к тому времени привязка уже сломан. – Cooper

ответ

1

Есть несколько проблем, которые я вижу впереди -

?

Вы передаете два параметра в метод executeQuery, вторым из которых является ваш обратный вызов успеха, но вместо этого вы передаете его своим наблюдаемым. Это не должно нарушать ваш запрос, но мне любопытно, что это за цель. Вероятно, вы пытаетесь просто выполнить запрос, а затем выполнить метод querySucceeded, когда ваше обещание повторное Нед -

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

Добротность ошибки вы получаете что-то я получаю 90% от времени, когда обещание не возвращается обратно правильно.

Я не вижу ничего, что должно срабатывать при первом вызове, а не во втором. Мне любопытно, что произойдет, когда вы нажмете свой URI за пределами своего запроса на Breeze.

Еще одна вещь, которую я бы рекомендовал вам сделать в вашем сценарии, или в любое время, когда у вас есть перерыв привязки, это то, что нужно предиповать $ data. к вашему наблюдаемому, в данном случае лизинму.

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

Это не собирается исправить все ломается в вашем приложении, но он будет принимать одну из переменных (AKA он не сломается привязками)

Еще одна вещь, которую я заметил, ваш привязку данных дампа, я сделал быстрый поиск Google и увидел, что он имеет какое-то отношение к отладке - вы уверены, что у вас установлен этот настраиваемый обработчик привязки?

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

Снятие второго параметра зафиксировано. Я так долго смотрел на код, что даже не заметил этого. Спасибо! У меня есть настройка привязки дампа, я не собирался включать его здесь, но копировать/вставлять слишком много. – Cooper

Смежные вопросы