0

我在rails、requirejs 和backbone 方面做了很多工作,并且知道如何在rails 中使用haml 咖啡模板。

App = new Backbone.Marionette.Application()



App.addInitializer (options) ->
  Backbone.history.start()
  alert "yay"


$ ->
 alert "yay"
 App.start() 

我如何在 Node.js 中做到这一点,我有一个 Node.js 应用程序,但对于如何获取模板来编译客户端,我处于死胡同,我没有卡在 haml 咖啡上,任何模板引擎都可以,玉也好,下划线也好。只是一个很好的起点,这样我就可以继续在 node.js 中构建主干应用程序。

任何帮助表示赞赏!

4

2 回答 2

1

我不建议将模板拖到客户端并在那里编译它们,正确的方法是使用一些框架,例如 www.socketstream.com 提供你想要的东西等等。如果您反对框架,在服务器上编译它们并在客户端上将它们作为函数调用的快速而肮脏的解决方案将是:

// compile.js 
var fs = require("fs")
    ,jade = require("jade");

exports.build = function(templatesDir) {
    var js = "var Templates = {}; \n\n";
    var files = fs.readdirSync(templatesDir);
    var jadeFiles = files.filter(function(file) {
        return file.substr(-5) === ".jade";
    });
    for(var i = 0; i < jadeFiles.length; ++i){
    var filePath, key;
    var file =  jadeFiles[i];
    key = file.substr(0, file.indexOf("."));
    filePath = templatesDir + file;
    var jadeSource =  fs.readFileSync(filePath);
    js += "Templates." + key + " = " + jade.compile(jadeSource, {
        debug: false,
        client: true
    }).toString() + "; \n\n";
}
return js;

};

// On the server.js
// Compile views
var viewsPath = path.join(__dirname, 'views/');
var generatedJs =  require('./compile').build(viewsPath);
var savePath = path.join(__dirname, 'public/js/lib/templates.js');
fs.writeFile(savePath, generatedJs, function (err) {
    if (err) throw err;
});

// Then on the client include js/lib/templates.js and use templates like this
FactSummaryView = Backbone.View.extend({
        template: Templates.issueSummary,
        render: function() {
            this.$el.html(this.template(this.model.toJSON()));

        return this;
    }
});

// Also add templates.js to nodemonignore if you're using nodemon
./public/js/lib/templates.js
/public/js/lib/templates.js
于 2013-05-16T08:24:58.723 回答
0

您通常不在客户端编译模板(希望模板直接在浏览器中编辑),而是在后端编译并在浏览器中呈现

编译模板

在此步骤中,您将模板源代码编译为包含渲染函数的 JavaScript 文件。

您可以在命令行上使用 haml-coffee并在构建过程中创建脚本,或者使用 Haml-Coffee README 的集成部分中列出的项目。

Grunt是运行某些任务的流行解决方案,使用Grunt-Haml,您当然可以为您的项目提供灵活的构建解决方案。

渲染模板

要使用 Marionette 渲染模板,您需要确保客户端上的模板渲染功能可用。只需在开发者工具中输入配置的命名空间,即可查看模板函数是否已注册:

注册的模板函数

如果这没问题,您需要有一个自定义模板渲染功能:

Backbone.Marionette.Renderer.render = (template, data) ->
  if JST[template]
    JST[template](data)
  else if _.isFunction(template)
    template(data)
  else
    console.error 'Template %s not found', template

现在您可以简单地定义视图模板,它会被正确渲染:

class App.Views.Login extends Backbone.Marionette.ItemView
  template: 'shared/_login'
于 2013-05-17T06:32:29.467 回答