流星 - 什么是Spacebars.kw {hash:Object}

day*_*oli 6 meteor spacebars

我正在尝试编写一个可以放在模板中的Meteor包.所以我首先尝试注册一个帮手.

Template.registerHelper('testHelper', function(a, b) {
        console.log(a);
        console.log(b);
})
Run Code Online (Sandbox Code Playgroud)

我在里面加了包装/packages,并在我的客户模板,当我加入{{testHelper "hello" "meow"}},控制台登录hellomeow,这是我所期待的.

当我加入{{testHelper "hello"}},我希望控制台登录hellonull,因为没有被作为第二个参数传递.但它返回hello了一个对象 -Spacebars.kw {hash: Object}

这是什么Spacebars.kw {hash: Object}?如果我想让它返回,我该怎么办null

Aks*_*hat 14

Spacebars.kw包含一个hash具有输入参数哈希的对象.

Meteor有两种匹配方法的方法,一种是直接匹配,即参数直接输入的位置,例如{{testHelper "variable1" "variable2" "variable3"}},将匹配为function(a,b,c)分别与a,b和c匹配的变量1-3.

第二种输入方法是使用哈希:

{{testHelper a="variable1" b="variable2" c="variable3"}}
Run Code Online (Sandbox Code Playgroud)

这将为a function(a)作为Spacebars.kw对象的位置提供单个参数.

Spacebars.kw对象将有一个子对象调用hash,其结构匹配:

{ "a" : "variable1",
  "b" : "variable2",
  "c" : "variable3" }
Run Code Online (Sandbox Code Playgroud)

Meteor将尝试直接匹配第一个参数,但后续参数将作为哈希值匹配,因为第二个输入为空,例如在您使用{{testHelper 'hello'}}where 的情况下b为null,因此它将作为哈希值给出.

它通常被赋予这个,所以如果你把b作为一个Spacebars.kw对象,你可以假设没有第二个输入.另一种方法是您可以使用哈希样式声明,然后直接检查哈希值是否为null:

{{testHelper text="Hello"}}
{{testHelper text="Hello" othertext="Hellooo"}}
Run Code Online (Sandbox Code Playgroud)

和助手:

Template.registerHelper('testHelper', function(kw) {
    console.log(kw.hash.text);
    console.log(kw.hash.othertext);
});
Run Code Online (Sandbox Code Playgroud)