【发布时间】:2015-05-19 05:32:14
【问题描述】:
我现在已经多次遇到这种情况,我意识到我对处理它的“流星/正确”方式并不十分自信。
假设我有一个包含多个部分的表单 - 每个部分都由一个模板表示 - 在每个部分中都有更多的模板表示例如。日期选择器等。
<template name='myForm'>
{{>partOne}}
{{>partTwo}}
<button class='submit'>Submit</button>
</template>
<template name='partOne'>
{{>widget}}
{{>widget}}
</template>
<template name='widget'>
<input class='datepicker' />
</template>
我想在用户填写表单时跟踪我的表单 - 在“myForm”模板级别 - 但所有事件都在“小部件”级别发生。
我经常看到的一个解决方案(例如in this SO answer)是将所有内容都放在全局 Session 变量中。像这样
Template.widget.events({
'click .select' : function(event, template){
var name = template.data.name;
Session.set(name, $(event.currentTarget).val());
}
});
然后在 myForm 我应该做这样的事情
Template.myForm.rendered = function(){
Tracker.autorun(function(){
var name = Session.get('name');
// do something
});
}
但是随着我的表单变得越来越复杂,我发现这在 myForm 模板级别上确实变得一团糟,同时使用并非真正的应用程序全局数据填充我的 Session 变量。
对于其他人如何处理此问题的任何想法,我将不胜感激!保持模板和小部件模块化,同时仍然能够跟踪父模板触发的事件并对其做出反应...
【问题讨论】:
标签: meteor