【问题标题】:Connection between HTML elements and DB documents (rows) in foreachforeach 中 HTML 元素和 DB 文档(行)之间的连接
【发布时间】:2015-03-04 07:11:10
【问题描述】:

我正在从这本书http://meteortips.com/book/ 中学习 Meteor,但我不明白元素的识别是如何工作的。

我有这个循环:

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

里面的播放器变量是这样的:

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

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

“li”元素的“this._id”怎么可能在“each”循环中返回与 {{_id}} 相同的值?

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

如果 "li" 元素在 "each" 循环内,那么 Meteor 会自动设置循环文档 (PlayersList) 的字段中的值,然后可以通过 "this" 关键字访问这些值?或者通过“this”关键字通常可以访问什么?

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

【问题讨论】:

    标签: meteor


    【解决方案1】:

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

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

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

    • 在助手的情况下,当前数据上下文与在空格键模板 (HTML) 中调用助手的位置相同。
    • 在事件的情况下,当前数据上下文是对应于元素目标的上下文。

    这意味着在click li.player 事件中,当前数据上下文将是&lt;li&gt; 项目之一,这是{{#each}} 循环迭代的播放器文档。

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

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

    【讨论】:

    • 非常感谢您的解释!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-04
    • 2018-11-11
    • 2020-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多