2014-05-23 13 views
0

我正在構建一個應用程序,並從Knockout開始。我們到了需要實現分頁的地步,看起來在Knockout中這樣做的事實庫是Pager.js。是否有可能將多個不相交的元素關聯到Pager.js中的頁面?

傳呼機很好用,很容易使用,但有一個用例,我一直無法找出一個傳呼機解決方案。

在我們的許多頁面中,我們希望能夠在頁面上的多個不相交元素中顯示某些內容。 (不知道「不相交」是否是適當的術語;真正意義的元素是不相連的,就像在DOM樹的完全獨立的分支中一樣)。例如,我們可能想要在頭部顯示某些東西,頁腳或菜單以及傳呼機將呈現的主界面。

到目前爲止,看起來Pager將頁面鏈接到僅一個元素,並且它是基於哪個頁面處於活動狀態而顯示/隱藏的元素。

有沒有辦法讓尋呼機顯示/隱藏多個不相交的元素?我需要依靠回調之類的東西才能完成這個任務嗎? (我知道當Pager顯示/隱藏一個頁面時有回調,我認爲這些可以用於實現這一點,但如果Pager爲我處理這個,它會更好。)

如果傳呼機不是真的支持這個用例,是否有另一個類似的庫來嘗試與Knockout兼容?或者,甚至會有另外一種替代Knockout的方式來支持這個(AngularJS,Ember等)?

編輯:看着灰燼,我尋找什麼是什麼described here and their "outlets" features(頁面上的最後一個例子)。所以,會用Knockout來尋找類似的功能。我認爲我可以使用一些Knockout回調來模仿它,但它可能會涉及很多jQuery來移動或隱藏/顯示事物。我寧願不必這樣做,因爲隨着時間的推移和應用程序變得越來越大,它會變成更多的維護頭痛。

回答

1

是的,它很容易實現。閱讀http://knockoutjs.com/documentation/binding-context.html

基本上,你只需要使用$parent$parents[x]或最終$root那些不是你正在使用的上下文對象級別的訪問可觀。

這裏是(使用pager.js與否不改變它的工作方式)的例子:

var viewModel = { 
    user: { 
    id: ko.observable(1), 
    name: ko.observable('John') 
    } 
    menu: { 
    links: { 
     about: 'about.html', 
     index: 'index.html' 
    } 
    } 
}; 

與此HTML:

<div id="header"> 
    <p>Your name is <span data-bind="text: user.name"></span></p> 
</div> 
<div id="menu" data-bind="with: menu"> 
    <p>Your name is still <span data-bind="text: $parent.user.name"></span></p> 
    <p>Your name is still <span data-bind="text: $parents[0].user.name"></span></p> 
    <p>Your name is still <span data-bind="text: $root.user.name"></span></p> 
</div> 
相關問題