2014-03-05 38 views
0

我使用ractivejs在服務器和客戶端上呈現html。我想有一個索引頁作爲ractivejs例如,在該頁面模板可以呈現,基於變量的名稱,如:如何使用變量名稱的ractivejs部分?

this.ractive = new Ractive({ 
    template: _GLOBAL.templates.index, 
    partials: _GLOBAL.templates, 
    data: { 
    context: context, 
    getPage: function() { 
     /** Should return rendered partial, or something that will end up as {{> myPartialName}} in index */ 
     return '> home'; 
    } 
    } 
}) 

這是目前可能的ractivejs?

回答

4

目前,partials不能像那樣工作 - 不管ractive.partials.myPartialName的值是什麼時候創建實例,它都會代替{{>myPartialName}}被渲染。

更改部分後期渲染是可以添加到未來版本的東西,因爲它不止一次出現。

但暫且你最好的選擇,如果您使用的是單實例多「頁」,大概是這樣的:

{{# page === 'home' }} 
    {{>home}} 
{{/ page === 'home' }} 

{{# page === 'admin' }} 
    {{>admin}} 
{{/ page === 'admin' }} 

{{# page === 'whatever' }} 
    {{>whatever}} 
{{/ page === 'whatever' }} 

然後頁面之間進行切換,會發生像這樣:

ractive.set('page', 'home'); 

// or, if there were transitions involved - e.g. one page flies out, 
// the other flies in 
ractive.set('page', null, function() { 
    ractive.set('page', home); 
}); 
+0

嘿,感謝您的快速repl Y!第一個選項對我來說有點問題,因爲我必須對頁面數量進行硬編碼。 – Phrearch

+0

@Rich - 過去是不是你可以在'beforeInit'中設置'this.template'?它現在不工作,但也許我想象它曾經工作過... – martypdx

+0

@martypdx好問題,我不記得了。如果沒有任何人注意,這種事情可能會發生變化,因爲(如果確實有效),這是一種副作用,而不是一種有意識的特徵,並且不會有任何測試。我可以看到它可能是有用的,但... –

0

我只需要它這樣的服務器端的工作,所以這似乎爲我工作正常,以及:

res(peer.getSnapshot(_GLOBAL.templates.home, context)) 

getSnapshot: function(template, context) { 
    var Ractive = require('ractive') 
    /** Inject a page template in the main template */ 
    var pageRactive = new Ractive({template: template, data: context}) 
    this.ractive = new Ractive({ 
     template: _GLOBAL.templates.index, 
     partials: _GLOBAL.templates, 
     data: { 
     context: context, 
     getPage: function() { 
      return pageRactive.toHTML() 
     } 
     } 
    }) 
    return this.ractive.toHTML({}) 
    } 
} 


<body> 
    {{{getPage()}}} 
</body> 
2

一種選擇是創建主模板作爲一個部件

<script type='text/ractive' id="main"> 
    <h1>Main Page</h1> 
    {{>content}} 
    <div> footer </div> 
</script> 

然後用它來包裝每個頁面模板:

<script type='text/ractive' id="page1"> 
    <main> 
     <p>I am page 1</p> 
    </main> 
</script> 

的,你可以只呈現頁面模板:

new Ractive({ 
    template: template //'#page1', '#page2, etc 
}).toHTML() 

請參閱:http://jsfiddle.net/3yjMj/

相關問題