2013-12-19 27 views
4

我有一個使用backbone.marionettehandlebars通過擴展backbone.marionette.handlebars提供的模板的Web應用程序。這工作得很好,但我想現在添加一些templateHelpers幫助格式化,我似乎無法得到它的工作。我已經在我認爲是正確的方式(見下文)中包含了模板助手,但是我從require.js中得到並顯示錯誤:「GET .../templates/helpers/foo.js 404(NotFound)」一旦backbone.marionette應用程序啓動。在backbone.marionette.handlebars中使用Handlerbars幫助程序

我的模板看起來像這樣(更新:感謝陳會毅)

<div>{{{foo myData}}}</div> 

而且我已經試過兩件事情。我Marionette.ItemView內首先定義一個簡單的輔助像這樣:

... 
return Marionette.ItemView.extend({ 
    template: template, 
    templateHelpers: { 
     foo: function (someData) { return 'foo and ' + someData; } 
    }, 
... 

這沒有工作,即我仍然有在第一段給出的require.js錯誤。 (注意:如果是問題但沒有解決問題,我嘗試了沒有函數參數)。

我做的第二件事是添加一個簡單的文件.../templates/helpers/foo.js,其中require.js定義返回一個帶有函數foo的對象。這給出了與以前相同的錯誤,即缺少文件。這可能是因爲我需要將此文件定義爲依賴項。我更喜歡第一種不需要外部文件的方法,但如果這是正確的方法,則很樂意使用這種方法。

最後,我注意到backbone.marionette.handlebars github上的this issue。這表明templateHelpers可以工作,但可能有問題。任何關於在這個環境中使用助手的建議將非常感激。

UPDATE

我多一點運行實驗表明,如果我有{{FOO}}或{{{FOO}}}然後調用foo的功能Marionette.ItemView.extend但不插入foo的迴歸。但是,如果我有{{foo myData}}或{{{foo myData}}},那麼它會給出上面列出的404 Not found錯誤。奇怪。

只是爲了完整性,我使用

  • 骨幹1.0.0
  • backbone.marionette 1.0.4
  • backbone.marionette.handlebars 0.2.0。

回答

3

好吧,我拿@BillyChan的建議,並開始深入代碼。繼兔子之後,事實證明,另一個插件正在處理助手。我沒有設計的單頁應用程序使用名爲require-handlebars-plugin的插件將把手整合到需求中。

這個插件對Backbone.Marionette一無所知,因此它使用require實現了它自己的registerHelper約定,你猜對了,它希望幫助器以特定的格式存放在.../templates/helpers/xxx.js中。這解釋了爲什麼我得到我的文件404,或者即使文件在那裏它沒有正確的格式。

再次感謝評論,但是我錯誤地看着錯誤的文檔。我之前沒有使用助手,所以我認爲我的設置不正確,但我沒有考慮到我看到的Handlebars和Backbone.Marionette文檔的建議。我現在更聰明瞭。