2013-10-25 53 views
1

我嘗試使用早午餐和把手設置開發環境。 handlebars-brunch包存儲在我的vendor.js文件中包含的我的node_moduleshandlebars.runtime.js中。我定義這個模板:早午餐 - Handlebars.templates是undefined

hello.template:

<p>Hello {{name}}</p>

而且這些行添加到我的config.coffee

templates: 
     defaultExtension: 'handlebars' 
     joinTo: 'app.js' 

而作爲一個證明,它的作品,我可以看到在我的app.js以下幾行:

;var __templateData = Handlebars.template(function Handlebars,depth0,helpers,partials,data) { 
this.compilerInfo = [4,'>= 1.0.0']; 

helpers = this.merge(helpers, Handlebars.helpers); data = data || {}; 
var buffer = "", stack1, functionType="function", escapeExpression=this.escapeExpression; 


buffer += "<p>Hello "; 
if (stack1 = helpers.name) { stack1 = stack1.call(depth0, {hash:{},data:data}); } 
else { stack1 = depth0.name; stack1 = typeof stack1 === functionType ? stack1.apply(depth0) : stack1; } 
buffer += escapeExpression(stack1) 
    + "</p>\r\n\r\n"; 
return buffer; 
}); 
if (typeof define === 'function' && define.amd) { 
    define([], function() { 
     return __templateData; 
    }); 
} else if (typeof module === 'object' && module && module.exports) { 
    module.exports = __templateData; 
} else { 
    __templateData; 
} 

但是當我調用Handlebars.templates.hello這樣的:

var tpl = Handlebars.templates.hello; 
var html = tpl ({ name: "ok" }); 
console.log (tpl); 

我得到這個錯誤:Cannot read property 'hello' of undefined。所以Handlebars被定義,但不是模板。我的依賴包容似乎好得作爲我的主要功能是位於一切後,像這樣:

[...] 
if (typeof define === 'function' && define.amd) { 
    define([], function() { 
     return __templateData; 
    }); 
} else if (typeof module === 'object' && module && module.exports) { 
    module.exports = __templateData; 
} else { 
    __templateData; 
} 

;(function ($, document, window) { 
    var tpl = Handlebars.templates.hello; 
    var html = tpl ({ name: "ok" }); 
    console.log (tpl); 
} (jQuery, document, window)); 

任何想法/建議?

回答

1

早午餐使用模塊。它不分配全局變量或其他東西。

require('name') 

如果你的文件是app/name.js

+0

正如我窩在我的JavaScript的命名空間,我已經停用在config.coffee模塊('模塊:包裝:假定義:返回FALSE)。我是否被迫使用模塊來使用模板?像這樣:'var helloTemplate = require('hello'); html = helloTemplate({name:'ok'})'? – Simon

+0

是的,像這樣。你需要模塊。在早午餐插件中不支持全局變量,但如果您確實需要它們,我們將爲拉取請求打開。 –

+0

只要我有辦法做到這一點就好了:)謝謝! – Simon