注意:下面的答案将让你的工作切换按钮,以及一个共享切换状态。如果你需要按钮来完成不同的事情,或者根据上下文改变不同的切换布尔值,那么还有更多的工作要做。这可能是可能的。
显示中使用的嵌套不会影响模板的内部表示形式。 Meteor中的所有模板都在Template对象中定义为Template.someTemplateName
。每个模板都是一个包含数据字段,函数和事件处理程序的JS对象。
为此,dashes in template names are forbidden。
由于meteor使用Javascript对象中的模板名称作为属性名称,因此模板名称必须遵循Javascript命名约定/限制。特别是,仪表板看起来像在生成的代码负:
Template.fancy-button.events
,将无法正常工作。 Javascript读取Template.fancy
减去button.events
,而不是作为花哨按钮模板的事件处理程序。
至于Javascript的兼容名称,http://javascript.crockford.com/code.html表明:
名称应该从26个大写和小写字母(A .. Z,一.. Z),10个数字来形成(0 ... 9)和_(underbar)...
另一个Javascript约定是camelCase,其中第一个单词后的名字中的每个单词都被赋予一个大写字母。我的建议是,而不是短跑改变你的代码如下:
<template name="fancyButton">
<p>This is a fancy button that I use in several places!</p>
<input type="button" class="veryFancy" value="Click Me!" />
</template>
<template name="homePage">
{{> fancyButton}}
// here, I want the button to bring up my "stats" page (go, iron-router, go)
{{ #if veryFancyStatus }}
{{ > statsPage }}
{{ /if }}
</template>
<template name="statsPage">
{{> fancyButton}}
// here, I want the button to show an alert page
{{ #if veryFancyStatus }}
{{ > alertPage }}
{{ /if }}
</template>
流星方法来设置一个单击处理程序是使用event maps
此外,你可能想使用helper to make it easier to use session variables in a template
下面是如何实现切换:
client.js(未经测试)
// initialize veryFancyStatus to 0
Session.set("veryFancyStatus",0)
// register veryFancyStatus so we can read it in every template
Handlebars.registerHelper('veryFancyStatus',function(input){
return Session.get("veryFancyStatus");
});
// set up an event handler so that any time a .veryFancy class element is clicked
// a function is called to toggle the session variable veryFancyStatus
// this should also trigger redraws in templates that are conditional on veryFancyStatus
Template.fancyButton.events({
'click .veryFancy': function() {
Session.set("veryFancyStatus", +(!(Session.get("veryFancyStatus")));
}
});
我觉得代码需要在客户端JavaScript中的点击处理程序,单击处理更新一些反应变量,这将触发重新绘制模板片段。 – Paul 2014-09-27 02:32:33
你有任何的JavaScript代码? – juanpastas 2014-09-27 03:57:52