流星中的反应变量 - 基本用例

时间:2015-03-23 03:22:31

标签: meteor

我正在使用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);
}
});

提前感谢您的任何想法。布伦丹

1 个答案:

答案 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的旧名称,如果你想让一段代码再次运行,如果它内部的反应变量发生变化,就会使用它。