Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 流星{{{每个}}–;每个项目的条件格式_Javascript_Meteor_Handlebars.js - Fatal编程技术网

Javascript 流星{{{每个}}–;每个项目的条件格式

Javascript 流星{{{每个}}–;每个项目的条件格式,javascript,meteor,handlebars.js,Javascript,Meteor,Handlebars.js,我从数据库中获取了一个游标,并使用{{{each}}helper标记执行通常的“列出每个项” html 但是,由于每个项目属于n个类别中的一个,我想a)确定它是哪一个类别,b)相应地更改span类别 换句话说,类别的名称与字符串耦合,我现在用字符串代替{{{this}},并存储在一个单独的集合中,例如 { "_id": "whatnot" "item": "item1", "category": "bar" } 目的是比较它们并确定与类别匹配的类别: {{#each item}}

我从数据库中获取了一个游标,并使用{{{each}}helper标记执行通常的“列出每个项”

html

但是,由于每个项目属于n个类别中的一个,我想a)确定它是哪一个类别,b)相应地更改
span
类别

换句话说,类别的名称与字符串耦合,我现在用字符串代替
{{{this}}
,并存储在一个单独的集合中,例如

{
  "_id": "whatnot"
  "item": "item1",
  "category": "bar"
}
目的是比较它们并确定与类别匹配的类别:

{{#each item}}
  <span class="[[what "category" does ‘this’ belong to?]]">{{this}}</span>
{{/each}}
{{{#每个项目}
{{this}}
{{/每个}}

如果这是不可能的,或者是一种不好的方法,我会很感激任何关于更好架构的建议,因为我认为这可能是问题所在。谢谢

一种更干净的方法是直接进入收藏

  • 将会话变量设置为要对集合执行的查询(不确定这是否必要,看起来您可能只是将查询结果保存到会话变量?)
  • 在助手中执行集合查询
  • #光标上的每个
  • 这是很好的,因为现在您将拥有
    {{{items}}
    ,而不是一个月后才知道wtf
    {{This}}
    。其次,您将在数据上下文中拥有该类别,因此可以为其编写帮助程序。例如,如果希望所有
    bar
    类别项目都具有
    baz
    类:


    return(this.category=='bar')&&&baz'

    您可以使用助手执行此操作:

    HTML:

    这假设您的Items集合通过名为categoryId的键链接到Categories集合-您的集合名称和键可能不同。它还假设您已经为可能的类别名称设置了css类

    你可能会想,“哎呀,每次我显示一个项目时,我都必须运行搜索?”答案是“是的,但是minimongo真的很快,所以不要担心。”你在客户端的内存中搜索,而不是通过网络到服务器到磁盘


    通常情况下,项目帮助器会返回一个游标,例如:
    Items.find(query)
    ,但看起来您正在执行find并将其填充到其他地方的会话变量中。您可能可以摆脱这一额外步骤。

    谢谢您的回复,但我不确定我是否理解。可能还不清楚我有两个独立的集合,其中一个包含项目,另一个包含它们所属的类别,我需要通过值匹配它们。请明确说明你在每个步骤中指的是哪一个?我为自己的愚蠢道歉,但我只是从《流星》开始的,事实上大部分的JS都是在两天前开始的。啊,不知道这是两个系列。考虑项目分类中的分类和粘贴类别。在NoSQL中,反规范化,尤其是在只有一个字段的情况下,几乎总是正确的选择。这样做,您可以更轻松地查询,您不需要订阅第二个收藏,等等。我的错,我应该更明确,对不起!谢谢你的提示,我也会看看非规范化。我也是Mongo的新手,所以需要一段时间,但我需要应用程序另一部分的第二个集合–例如,将这两个集合视为帖子和用户,另外,其中一个正在由外部刮板进行更新,所以有点乱。我将添加我几乎标准的评论,看看您是否正在做感觉像关系连接的事情。非常好的帮助,非常感谢!尽管出于某种原因,我不得不根据尝试和错误进行一些调整,特别是:
    Categories.findOne({“my_id”:this.toString()}).category
    我确实在别处执行find,因为我将它馈送到
    aslagle/reactive表
    ,然后根据单击的行显示这些项目,因此上面只是一个简单的示例。我会设法弄明白,并编辑我的帖子以备将来参考,但现在我很高兴它能起作用。:)
    {
      "_id": "whatnot"
      "item": "item1",
      "category": "bar"
    }
    
    {{#each item}}
      <span class="[[what "category" does ‘this’ belong to?]]">{{this}}</span>
    {{/each}}
    
    <template name="name">
      {{#each item}}
        {{> item}}
      {{/each}}
    </template>
    
    <template name="item">
      <span class="{{category}}">{{this}}</span>
    </template>
    
    Template.name.helpers({
      item: function(){
        return Session.get('foo').items
      }
    });
    
    Template.item.helpers({
      category: function(){
        return Categories.findOne({_id: this.categoryId}).category;
      }
    });