meteor - 如何为模板项提供客户端 bool 标志?

标签 meteor handlebars.js

我正在研究 Meteor 的 Todos 示例来了解它的工作原理,并且我正在尝试向 Todo 项目添加描述,当您单击它时,该描述会出现在标题下方。 “当你点击它时”部分是我遇到的麻烦。我试图弄清楚如何向每个待办事项客户端添加 bool “查看”变量,而不需要服务器端的任何反射(reflect)。显然,当 1 个用户正在查看某个项目时,并非每个用户都希望查看该项目。我通过添加一个仅客户端集合来实现基本实现,该集合只是正在查看的 Todo id 列表,然后使用此代码作为模板来了解某个想法是否正在被查看:

Template.todo_item.viewing = function () {
    return Viewing_Todos.find({title: this.title}).count() > 0;
};

但这并不是一个真正理想的解决方案。正如我所说,我希望每个待办事项上都有一个客户端 bool 变量来说明它是否正在被查看。

我尝试将其更改为:

Template.todo_item.viewing = false;

然后我的点击事件是:

'click .todo-description': function(event) {
   event.target.viewing = !event.target.viewing;
}

我在控制台日志输出中添加了“event.target.viewing”是什么,它似乎正在正确更新,但 Handlebars 不再动态更新 DOM 以反射(reflect)该项目处于“查看”状态。

Handlebars HTML 是:

      {{#if viewing}}<br/>
      <div class="todo-description">
          {{text}}
      </div>
      {{/if}}

我想我可能必须在助手中执行此操作,所以我尝试了以下操作:

Template.todo_item.helpers({
    viewing: false;
});

但这似乎根本不起作用。

感谢您的帮助!总的来说,我对 Web 开发还很陌生,但到目前为止我很喜欢 Meteor。

最佳答案

为此完全不需要单独的客户端数据库。一般来说,如果你想控制 UI 状态,“查看”就是一个完美的例子,你可以设置 Meteor Session多变的。代码可能如下所示:

// Click event
'click .todo-description': function (event, templ) {
    Session.set('viewing-todo', templ._id); // We're now viewing todo with id=_id
}

// Are they viewing a todo?
if (Session.get('viewing-todo')) // ...

// Or perhaps they're viewing "foobla" todo?
if (Session.equals('viewing-todo', 'fooblaId')) // ...

但是,如果您想为每个待办事项都有一个单独的“查看”标志(他们是否能够一次查看多个项目?),您可以尝试附加 data-* attribute到每个待办事项元素。使用 jQuery data method 可以很简单地做到这一点。您的代码可能如下所示:

// Click event
'click .todo-description': function (event, templ) {
    $(event.target).data('viewing', true);
}

// Are they viewing a todo?
if ($('#todoElement').data('viewing')) //...

关于meteor - 如何为模板项提供客户端 bool 标志?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19757206/

相关文章:

javascript - 如何让 Email.send 在未来(7 天、14 天等)发送电子邮件

node.js - 从 meteor 应用程序中删除 Handlebars 包

handlebars.js - 如何在 Handlebars 部分路径中添加动态值

node.js - 如何使用handlebar express获取渲染的HTML?

javascript - Meteor User 表取值

javascript - meteor .js : iron:router including name

javascript - 拒绝更新 mongo 集合中的文档子集

templates - 如何处理 Meteor 模板中的 switch case

mongodb - 无法在部署的 Heroku 网站上显示 MongoLab 数据

javascript - RequireJS 和 Handlebars - Handlebars 未定义