如果您只有两种状态(与开放式动态相反),您可以有条件地阻止它们:
<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)
})
否则它只会更改同一组件实例中的数据,这不会让它重新创建和分配新模板。