foreach中HTML元素与DB文档(行)之间的连接

时间:2015-03-03 22:46:04

标签: meteor

我从这本书http://meteortips.com/book/学习流星,我不明白该元素的识别是如何运作的。

我有这个循环:

{{#each player}}
    <li class="player {{selectedClass}}">{{_id}} {{name}}: {{score}}</li>
{{/each}}

内部玩家变量是:

'player': function(){
    return PlayersList.find();
},

PlayersList是一些玩家及其得分的集合。

怎么可能&#34; this._id&#34; &#34; li&#34; element返回与{{_id}}相同的值,其中&#34;每个&#34;循环?

   'click li.player': function(){
        var playerId = this._id;
   }

如果&#34; li&#34;元素在里面&#34;每个&#34;循环然后Meteor自动设置循环文档(PlayersList)的文件中的值,然后可以通过&#34;这个&#34;关键词?或者通过&#34;这通常可以访问的内容#34;关键字?

感谢您的每一个解释......

1 个答案:

答案 0 :(得分:2)

在Meteor模板中有一个当前数据上下文的概念,您可以使用以下几种方法设置当前数据上下文:

  • {{#each}}块帮助器将当前数据上下文设置为集合的当前迭代项(Mongo.Collection游标或普通数组)。
  • {{#with}}块帮助器将当前数据上下文设置为您传入的任何参数。
  • 使用模板包含语法,您可以将当前数据上下文作为参数({{> myTemplate dataContext}})传递,同样,您可以使用动态模板包含语法{{> Template.dynamic template="myTemplate" data=dataContext}}
  • 使用iron:router,您可以为路径分配模板以及数据上下文(与动态模板包含类似)。

结果是JS中的模板助手和模板事件内部,this关键字始终引用当前数据上下文。

  • 对于帮助程序,当前数据上下文与在Spacebars模板(HTML)中调用帮助程序的位置相同。
  • 对于事件,当前数据上下文是与元素目标对应的上下文。

特别是它意味着在click li.player事件中,当前数据上下文将是<li>项之一,它是{{#each}}循环迭代的播放器文档。

还有其他选项可以访问当前数据上下文,模板实例上声明了只读data property,还有一个名为Template.currentData()的特殊function

这无疑令人困惑,下一版Blaze(Meteor模板渲染引擎)即将推出的功能之一就是通过确保更好的连贯性和更好的可读性来解决这个问题。