2014-11-04 42 views
2

爲了避免重複代碼,我發現有一個輔助函數可以在foo.rendered功能(例如)。爲什麼在Meteor的0.9.3中這是可能的,但在1.0中拋出一個錯誤?從模板中調用幫助器函數,在Meteor.js中的錯誤,1.0中的錯誤,0.9.3中的錯誤

Template.foo.helpers({ 
    'fooFn' : function(){ 
    return "something" 
    } 
}); 

Template.foo.rendered = function(){ 
    var something = Template.foo.fooFn(); 
} 

我應該改變foo.rendered語法(我會叫錯了?),或者可能使用不同的方法完全(設置功能傭工外({})和渲染()和調用這些?或者其設置爲已註冊的輔助函數?

+1

如何定義外部函數fooFn並在'Template.foo.helpers({'fooFn':fooFn});'和var something = fooFn();' – user3557327 2014-11-04 20:36:07

+0

中使用它似乎是一個不錯的選擇,謝謝。我渴望聽到任何其他Meteor開發人員以及他們如何在需要模板內部函數的情況下構建應用程序。 – typeofgraphic 2014-11-06 12:14:41

回答

5

看起來這是可能的流星1.0.3.1的查找和調用輔助功能,但很顯然這不是應該這樣使用。

仍然可以這樣做:

Template.foo.__helpers[" fooFn"]() 

請注意函數名稱的前導空格。

處理此問題的另一種方法是將函數附加到全局名稱空間,然後從代碼中的其他位置調用該函數,如user3557327所述。

此外,您可以使用:

Template.registerHelper('myHelper', function(){return 'Look At Me!'}) 

註冊一個全球性的幫手,並用顯式調用它:

UI._globalHelpers['myHelper']() 
+1

如果要爲第一個選項應用數據上下文,則需要使用apply()所以:'Template.foo .__ helpers [「fooFn」]。apply(contextObject,parameterArray)' – MrMowgli 2015-02-20 04:04:49

1

我認爲這將是一個更好的方法:How to use Meteor methods inside of a template helper

定義一個函數並將其附加到模板。從渲染調用該函數,以及您的模板助手。就像MrMowgli說的那樣,你可能並不是「應該」從.js文件中調用模板助手,而是僅僅從......可能在未來破解。

例如定義函數,然後將其連接到tamplate:

Template.Play.randomScenario = function() { // HACK HACK HACK } 

,然後從你的生命週期方法調用它

Template.Play.created = function() { 

    Template.Play.randomScenario(); 

}; 

scenario: function() { 
    return Template.Play.randomScenario();; 
    }, 

我有同樣的問題,這是我使用的解決方案。希望有所幫助。