2013-12-19 67 views
11

我已經註冊了一個全球性的功能是這樣的:全球功能

Handlebars.registerHelper('dialogBoxOptions', function (callbackFunctionName){ 
    return { 
     callBack: callbackFunctionName 
    }; 
}); 

但是當我嘗試訪問它下面我得到dialogBoxOptions沒有定義

Template.myLlist.helpers({ 
    dOpt: dialogBoxOptions('dlgCB') 
}); 

我曾嘗試這是一個全局的handlebars助手和一個常規的javascript函數,但是得到了相同的結果。

回答

20

您不能訪問車把傭工這種方式,您可以訪問他們的模板:如果您要訪問它放在你的助手像你正在做的現在,你應該,而不是註冊一個全球性的方法

<template name="myList"> 
    {{dialogBoxOptions.callback 'something'}} 
</template> 

。如果你想使全局模板助手,你可以把這個文件中的像/lib/helpers.js

dialogBoxOptions = function (callbackFunctionName){ 
    return { 
     callBack: callbackFunctionName 
    }; 
} 

此外,語法是:

Template.registerHelper("dialogBoxOptions", function (param2) { 
    return true; 
}); 
+0

謝謝,我試過一個全球性的javascript函數,但我認爲這是在錯誤的位置,投入/ lib下似乎已經完成了帽子戲法。一個注意:它使用「function dialogBoxOptions(callbackFunctionName)」時不起作用,我必須使用你的語法 - 爲什麼會這樣? –

+3

'函數XX()'是可變的作用域所以它的工作原理,但只有在其文件中所定義,同樣地'VAR XX =函數()'也作用域到該文件。如果沒有'var'關鍵字,它對所有文件都是可見的。 '/ lib'加載第一所以也許就是爲什麼它的工作你感動後有 – Akshat

+0

在這種情況下,如何將dialogBoxOptions獲得模板實例內部訪問,比方說,一個集合訂閱? – Aaron

13

現在有一種方式來獲得進入註冊全球幫手。

//Register the helper 
UI.registerHelper("functionName", function (param1, param2) { 
    return true; 
}); 

//Use the helper elsewhere 
var result = UI._globalHelpers('functionName')(param1, param2); 
+2

UI.registerHelper是否爲Template.helpers折舊?在這種情況下訪問Template.helpers的語法是什麼?也許Template._globalHelpers也許? – Aaron

+7

@Aaron:'Template.registerHelper'將是正確的方法:http://docs.meteor.com/#/full/template_registerhelper – erb

+0

@erb現在,我使用的registerHelper(S)。謝謝。 :) – Aaron

6

流星1.0+它看起來像語法創建一個全球性的助手錶示現在是:

Template.registerHelper('functionName',function(param1,param2){ 
    ... your code here ... 
}) 

然後在任何地方使用它在客戶端上搭配:

var result = Blaze._globalHelpers.functionName(param1, param2); 

OTOH,UI對象不會出現在當前的documentation中,所以我還想知道這個用法是否有福。