如果你只是有兩種狀態(相對於開放式的活力),可以有條件地阻止他們:
<div id="modal" intro-outro="fade:100">
<div id="content">
{{^selected}}{{>partial1}}{{/}}
{{#selected}}{{>partial2}}{{/}}
</div>
</div>
您可以加強數據模型後初步呈現。假設你有一個玩家點擊處理程序:
ractive.on('playerSelected', function(e){
//however your data works...
$.get('/player?id=' + e.context.id, function(data){
ractive.set(e.keypath + '.player', data.player)
ractive.set(e.keypath + '.selected', true)
})
})
如果你需要一個更動態的方法,你可以使用一個組件動態設置部分。這裏有一個例子(http://jsfiddle.net/9Vja5/2/)說明你如何在4.0中做到這一點(4.1會在這方面提供一些改進)。在主模板中使用的成分:
<div>
{{#reset}}
<dynamicPartial partial='{{partial}}'/>
{{/}}
</div>
然後,模板設置爲所提供的部分在組件beforeInit
:
Ractive.components.dynamicPartial = Ractive.extend({
beforeInit: function(o){
o.template = '{{>' + o.data.partial + '}}'
}
})
的泛音需要或者在全球範圍內所定義,或所述動態成分上。
我使用的是部分因爲這就是你的問題。如果您有要分配的模板列表,則可以直接設置模板。或者,您也可以通過'<' + component + '/>'
將模板設置爲組件。
重置是一個黑客位的強制Ractive重新呈現組件:
r.observe('partial', function(){
r.set('reset', false)
r.set('reset', true)
})
否則就只是改變同一組件實例中的數據,這將無法得到它的重建和分配一個新的模板。
@martydpx我讀了你的答案,它符合我的需要,問題是排名不是窗口將要包裝的唯一模板。有20個其他模板可以具有相同的行爲,因爲它是我正在談論的遊戲。我很抱歉沒有指定,我會立即更新問題。 – Eduard
@edduvs添加了一個動態的部分示例給你一些想法 – martypdx
沒關係,我不會讓自己複雜化,我只是等到直到RactiveJS將在這個領域進一步發展,我會擺脫窗口的ractive實例,並在頁面加載時將其插入到dom中,然後在內容div中創建模板的新實例,以便窗口不需要再次拆卸,然後重新啓動init。 – Eduard