如何在流星点击中更改变量的值

时间:2014-02-27 11:32:19

标签: meteor

在我的流星应用程序中,我需要加载一个与点击的项目相对应的项目数组。由于我是流星的新手,我在这里举行。这是我的代码。

Template.templatename.events({
'click .showdiv' : function()
{
  Template.templatename.vname = function () {
  return Db.find();
  }
}

我可以通过此代码动态设置变量vname吗?这不适合我。

1 个答案:

答案 0 :(得分:2)

我认为你误解了反应性的概念。 reactive data source将导致任何依赖它的函数(包括帮助程序)在其值发生更改时重新运行,这似乎是您在此处寻找的行为。相反,每次单击某个项目时,您都会重写辅助函数本身,这会破坏Meteor的反应数据模型的对象。会话变量可以提供帮助:

Template.templatename.events({
    'click .showdiv' : function() {
        Session.set('vname', Db.find());
    }
});

Template.templatename.vname = function () {
    return Session.get('vname');
}

如果您在{{#each vname}}模板中使用templatename块,则会在点击Db.find()时自动使用.showdiv查询的结果进行更新。如果您要做的只是显示该查询的结果,无论是否已经注册了点击,它都将如下所示:

Template.templatename.vname = function () {
    return Db.find();
}

请注意,由于查询将返回一个游标(这很好,但您需要使用{{#each ...}}循环播放它 - 仍然不清楚您要在此处填充哪些数据 - 使用{{1}如果你只想要一个项目),它的内容不会依赖于click事件的固有内容(比如你单击的findOne)。在前一个示例中,它将无法显示任何内容,直到第一次单击(之后您必须使用.showdiv重置以阻止它再次显示任何内容。)