在Meteor中,定义辅助函数的旧方法与新方法不冲突吗?

时间:2016-03-17 12:26:54

标签: javascript meteor helper

我是Meteor的新手并试图遵循“你的第一个流星应用程序”#34; http://meteortips.com/first-meteor-tutorial/ 我试图定义一个辅助函数。 在我写的html文件中:

<head>
    <title>Leaderboard</title>
</head>
<body>
    <h1>Leaderboard</h1>
    {{> leaderboard}}
</body>

<template name="leaderboard">
    <!-- Hello World -->
    <!-- {{player}} -->
    <!-- {{otherHelperFunction}} -->
<ul>
    {{#each player}}
        <li>{{name}}:{{score}}</li>
    {{/each}}
</ul> 

{{numOfPlayer}}
</template>

在我写的JS文件中:

if(Meteor.isClient){
    Template.leaderboard.helpers({
        "player": function(){
            // return "Some other text";
            return PlayersList.find();
        },
        "numOfPlayer": function(){
            // return "Some other text";
            return PlayersList.find().count();
        },
        "otherHelperFunction": function(){
            return "Some other funciton";
        }
    })
    Template.leaderboard.player = function(){
    return "Some other text";
    }
    // console.log("Hello client");

}

if(Meteor.isServer){
    console.log("Hello server");
}

PlayersList = new Mongo.Collection('players');

所以在客户端部分的JS文件中,我定义了两个&#34;播放器&#34;辅助函数:一种是旧方式,另一种是新方式。旧的方式实际上是我忘了评论但是当我运行这个项目时,网站结果是以新的方式执行&#34;似乎老路定义了#34;播放器&#34;辅助函数根本不影响项目,并且编译器没有说出任何错误或含糊不清(因为你可以看到这两个&#34;播放器&#34;辅助函数是针对不同的功能定义的)。这是什么原因?是因为新辅助函数会覆盖旧方法定义的辅助函数吗?

这是输出接口。 Here is the output interface

2 个答案:

答案 0 :(得分:0)

这是因为新的方式改写了旧的方式。新方法为变量&#39; player&#39;。

分配新的函数引用

答案 1 :(得分:0)

来自Meteor source code

  

路径中的第一个标识符以两种方式之一解析:

     
      
  1. 索引当前数据上下文。标识符foo引用当前数据上下文对象的foo属性。

  2.   
  3. 作为模板助手。标识符foo指的是可从当前模板访问的辅助函数(或常量值)。

  4.         

    模板助手优先于数据上下文的属性。

您的Template.leaderboard.player函数定义位于数据上下文中,因此Blaze首先查找模板助手。由于您已定义了帮助程序,因此它优先并执行。