2013-08-24 39 views
3

我使用Pager.js和OnShow通過通配符動態獲取正確的數據。 它在您首次訪問頁面時有效,但如果您導航到新的ID,則會返回正確的viewModel,但綁定不會更新。Pagerjs在第一次訪問後沒有使用OnShow更新

HTML:

<div data-bind="page: {id: 'start'}"> 
    <a href="" data-bind="page-href: '/11'">id 11</a> 
    <a href="" data-bind="page-href: '/12'">id 12</a> 
</div> 
<div data-bind="page: {id: '?', withOnShow: showView}"> 
    <h1 data-bind="text:id"></h1> 
    <a href="" data-bind="page-href: '/11'">id 11</a> 
    <a href="" data-bind="page-href: '/12'">id 12</a> 
</div> 

JS

vm = ko.mapping.fromJS({test: 1}); 
vm.showView = function(callback, page) { 
    console.log(page.currentId); 
    vm = ko.mapping.fromJS({id: page.currentId}); 
    callback(vm); 
}; 
pager.useHTML5history = true; 
pager.Href5.history = History; 
pager.extendWithPage(vm); 
ko.applyBindings(vm); 
pager.startHistoryJs(); 

的jsfiddle:http://jsfiddle.net/xU4Uu/

嘗試導航到其中一個鏈接,然後使用新的鏈接導航到其它ID。控制檯日誌顯示返回的正確ID,但h1未更新。

我使用這個錯誤還是這是一個在pager.js中的錯誤?我正處於一個項目的中間,我真的需要讓這個工作。有沒有人解決這個問題?

+0

希望我能幫助,但不能完全肯定Pager.js做什麼。 +1希望可以幫助別人找到你的問題。 –

+0

它可能是一個pager.js錯誤...因爲如果您將KO版本更改爲2.2.1,它可以工作:http://jsfiddle.net/j8BTC/。順便說一下有更新版本的pager.js 1.0.1:https://github.com/finnsson/pagerjs#101他們聲稱他們已經解決了這個不兼容問題... – nemesv

回答

1

您的代碼每次調用.showView時都會重新創建視圖模型。您不應該重新創建視圖模型,而只是更新其屬性。

變化:

vm = ko.mapping.fromJS({id: page.currentId}); 

到:

ko.mapping.fromJS({id: page.currentId}, vm); 

與VM中使用ko.mapping.fromJS作爲第二個參數將更新VM構件用新值(分別與第一參數傳遞)。

修正小提琴:http://jsfiddle.net/xU4Uu/1/

+0

謝謝,現在看起來很明顯,但沒有的例子表明它在行動。謝謝! –

+0

我不認爲這是答案。可以使用獨立的(即不附加到$ root)上下文;嘗試使用<! - ko:{foo:'bar'} - >。那個在pagerjs中動態生成它應該無關緊要。 –

相關問題