2013-12-19 5 views
11

流星テンプレートヘルパーのための機能:グローバル私はこのようなグローバル関数を登録している

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

が、私は、私はdialogBoxOptionsを取得し、以下のようにそれをアクセスしようとすると定義されていない

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

私が試してみましたこれはグローバルハンドルバーヘルパーと通常の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を入れてトリックをしたようだ。 1つの注意: "function dialogBoxOptions(callbackFunctionName)"を使用しても機能しません。あなたの構文を使用する必要があります。なぜそうでしょうか? –

+3

'function xx()'は可変スコープで動作するので、 'var xx = function()'と同じようにスコープされます。 'var'キーワードがなければ、それはすべてのファイルに見えます。 '/ lib'が最初に読み込まれたので、あなたがそこに移動した後になぜそれがうまくいったのでしょうか? – Akshat

+0

この場合、dialogBoxOptionsはどのようにしてTemplateインスタンス内のCollectionサブスクリプションにアクセスできますか? – 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 ... 
}) 

次に、クライアント上の任意の場所にそれを使用しますwith:

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

OTOH、UIオブジェクトは現在のdocumentationには表示されないので、この使用法が祝福されているのか疑問に思っています。