【问题标题】:How do I pass collection information through #each block in Meteor?如何通过 Meteor 中的#each 块传递收集信息?
【发布时间】:2014-06-18 03:52:27
【问题描述】:

我正在用 Meteor Collection Cases 中的不同项目填充下拉菜单。

  <select id="caseChoice">
   {{#each case}}
     <option>{{name}}</option>
   {{/each}}
  </select>

我得到选择的值,也就是名称:

 var caseName = document.getElementById("caseChoice").value;

我可以使用以下方法检索案例的 ID:

 var caseID = Cases.findOne({name:caseName})._id;

但是,我计划让用户创建具有相同名称的案例。他们是一种通过{{each}} 传递id 而不在下拉选择中显示_id 的方法吗?

【问题讨论】:

  • 你不能只使用option元素的value属性吗?
  • @Nate &lt;option value="{{_id}}"&gt;{{name}}&lt;/option&gt;,那么 document.getElementById("caseChoice").value 将是所选选项元素的 value 属性的值,在这种情况下也就是所选文档的 id。

标签: javascript meteor spacebars meteor-collections


【解决方案1】:

如果您的意思是希望每个 html 标记都包含 id,您可以使用选项的 value 属性,或者使用 html5 数据属性:

{{#each case}}
  <option value="{{_id}}" data-id="{{_id}}">{{name}}</option> // can use value= or data-id=
{{/each}}

这将在浏览器的源代码中可见,但不会在用户屏幕上显示。或者,如果您想通过模板事件访问 id,它也将在那里可用:

"click option" /*or whatever event handler is appropriate here*/: function(event, template){
  var id = template.data._id;
  /* alternatively you can call this._id which will generally give you the same result */
  /* then do your event handling, etc. */ 
}

【讨论】:

  • 正如 Rahul 所说,为什么不使用 value 属性?
  • 没有理由。在这种情况下,它们应该是等效的。我将编辑答案以避免任何混淆。
  • 很好的答案。谢谢杰里米。和@PeppeL-G。
  • @JeremyS。我认为 value 属性为搜索引擎(蜘蛛)提供了比 data 属性更好的信息(他们完全忽略了 data 属性?),但也许 id 字符串并没有那么大的区别。
猜你喜欢
  • 1970-01-01
  • 2021-02-02
  • 1970-01-01
  • 2016-06-01
  • 2013-08-15
  • 1970-01-01
  • 1970-01-01
  • 2020-07-10
  • 1970-01-01
相关资源
最近更新 更多