我正在尝试为某个模板获取以下行为:
<body onload="someInitFunction();">
假设我有以下标记(我使用mrt路由器,而不是铁路由器,用于{{renderPage}}):
// Main Template
<head>
<title>meteorite-knowviz</title>
</head>
<body>
{{> header}}
<div class="container-fluid">
<div class="row">
{{renderPage}}
</div>
</div>
{{> footer}}
</body>
该renderPage是第二个模板:
<template name="secondTemplate">
{{#if currentUser}}
<div class="col-md-2">
<div class="list-group">
<a class="list-group-item" href="{{render thirdTemplate please...}}">Third Template</a>
<a class="list-group-item" href="{{render fourthTemplate please...}}">Fourth Template</a>
</div>
</div>
// In this case let's say thirdTemplate gets rendered
{{render the choice taken above please...}}
{{/if}}
</template>
在这个模板中,根据点击的链接,(在这种情况下是第三个),最终会有第三个模板,它将通过javascript框架显示数据可视化,这将需要a <body onload="initFunction();">
以显示数据:
<template name="thirdTemplate">
<div class="col-md-5">
<h2>THIS!! section needs a "<body onload="initFunction();"> in order to work" ></h2>
</div>
<div class="col-sm-5">
<h2>Some other related content here</h2>
</div>
</template>
总结一下,我有三个问题:
1a上。我怎么能得到第三个模板来获得<body onload="initFunction();">
2a上。我可以通过哪种方式在secondTemplate中呈现不同的模板?
2B。我可以在此模板中使用{{renderPage}}
,即使此模板是主模板中的renderPage,还是应该以其他方式执行?
答案 0 :(得分:1)
为了获得<body onload="initFunction();">
,我必须执行以下操作:
首先将以下函数添加到客户端文件夹中的.js文件中:
Template.thirdTemplate.rendered = function() { // Template.thirdTemplate.created - also worked.
$('body').attr({
onload: 'init();'
});
}
然而,这给我一个错误,说没有定义initFunction。在标准的html页面中,我可以正常工作,但在流星中我不得不改变我的功能:
function initFunction(){
//what ever i wished to do
}
要:
init = function() {
//what ever i wished to do
}
关于页面的渲染,由于路由器的添加不再在开发中,因此铁路由是可行的。
答案 1 :(得分:0)
1a上。我怎么能得到第三个模板来获得
<body onload="initFunction();">
你可能想在渲染第三个模板时调用initFunction,所以只需在渲染的回调中调用它。
Template['thirsTemplate'].rendered = function(){
initFunction()
}
2a上。我可以通过哪种方式在其中呈现不同的模板 secondTemplate?
2B。即使这样,我可以在此模板中使用{{renderPage}}吗? template是主模板中的renderedPage,或者我应该在中 其他方式?
侦听链接上的点击,当有人发生时,您手动渲染所需的模板(如果需要反应,可以使用Meteor.render)并将其添加到文档中的右侧节点。请参阅this question。
可能用路由器实现(我不知道那个包)。
答案 2 :(得分:0)
我认为您要使用的是created
回调,每次创建模板时都会调用它,而不是rendered
回调,每次更改时都会调用导致模板重新渲染。
Template.thirdTemplate.created = function(){
initFunction()
}
有关其他类型回调的模板,请参阅文档:http://docs.meteor.com/#templates_api