我正在使用Meteor构建一个项目,并试图了解如何使用反应变量。我已经阅读了我可以在其上找到的所有内容,但每个示例似乎都提供了不同的语法来包含它们。对于本应该是Meteor核心力量的东西,我很确定我正在过度思考这个问题。我的用例很简单 - 我确信如果我能够正确使用,我将能够轻松复制。
第一个用例是创建一个公司的公司简介。用户通过填写表单中的三个字段(名称,扇区和状态)将新公司添加到集合中。状态为公共或私有,并在下拉列表中选择。在提交时,用户将被带到公司资料中,其中这些字段填充在模板中,其他模板包含股票价格/市值,财务等。我希望模板显示股票价格和市值(CompanyCapTable)到仅在状态字段为“公共”而非“私有”时出现。我假设我可以将状态设置为反应变量。
的客户机/模板/ company_profile.html
<div class="company-template">
{{#if isPublic}}
<div class="company-template" id="company-captable">
{{> CompanyCapTable}}
</div>
{{else}}
<p><em>Private Company</em></p>
{{/if}}
</div>
的客户机/模板/ company_profile.js
Template.CompanyProfile.helpers({
isPublic: function () {
return Session.get("status")
}
});
这是我迷路的地方。将状态设置为反应变量的最佳方法是什么?我看到使用Session,Deps(在这两者之间选择?),Tracker等的例子,但我遗漏了一些东西。这是我为最初选择状态的前一页尝试的代码,但即使我选择公开,我也只获得私有结果。
的客户机/模板/ company_create.html
...
<div>
{{> afFieldInput name='status' type="select" class="form-control"}}
</div>
...
的客户机/模板/ company_create.js
Template.CompanyCreate.events({
'submit': function(event) {
var value = $(event.target).val();
Session.set('status', value);
}
});
提前感谢您的任何想法。布伦丹
答案 0 :(得分:1)
在您的情况下,您正确地执行此操作(使用会话变量),因为状态是在另一个模板中设置的。那里有很小的空间。
如果您在同一模板中设置状态,那么我建议在模板实例中使用反应性var:
Template.CompanyProfile.onCreated(function() {
this.status = new ReactiveVar(defaultStatus);
})
Template.CompanyProfile.helpers({
isPublic: function() {
return Template.instance().status.get();
}
})
Template.CompanyProfile.events({
'click button': function() {
Template.instance().status.set(newValue);
}
})
顺便说一下,Deps是Tracker的旧名称,如果你想让一段代码再次运行,如果它内部的反应变量发生变化,就会使用它。