gpt4 book ai didi

requirejs - 在 Marionette 中使用预编译的 Handlebars 模板

转载 作者:行者123 更新时间:2023-12-03 08:06:43 25 4
gpt4 key购买 nike

我正在使用带有 requirejs 的 Marionette,我还想使用预编译的 Handlebars 模板。
这是如何运作的?

这是我当前的设置:

require_main.js:

requirejs.config({
baseUrl: "/",
paths: {
'text': 'vendor/javascripts/text',
'backbone': "vendor/javascripts/backbone",
'backbone.wreqr': "vendor/javascripts/backbone.wreqr",
'backbone.babysitter': "vendor/javascripts/backbone.babysitter",
'jquery': "vendor/javascripts/jquery",
'jquery-ui': 'vendor/javascripts/jquery-ui',
'json2': "vendor/javascripts/json2",
'marionette': "vendor/javascripts/backbone.marionette",
'underscore': "vendor/javascripts/underscore",
'handlebars': "vendor/javascripts/handlebars"
},

shim: {
'underscore': {
exports: "_"
},
'backbone': {
deps: ["jquery", "underscore", "json2"],
exports: "Backbone"
},
'marionette': {
deps: ["backbone"],
exports: "Marionette"
},
'jquery-ui': ['jquery'],

'handlebars': {
exports: 'Handlebars'
}
}
});
require(["app"], function(MyApp){
MyApp.start();
});

应用程序.js:
define(['marionette', 'handlebars', 'text!compiled.handlebars'], function(Marionette, Handlebars, Template_one) {

var MyApp = new Marionette.Application();

MyApp.addRegions({
mainRegion: "#main-region"
});

MyApp.StaticView = Marionette.ItemView.extend({
template: Template_one(context)
});

MyApp.on("initialize:after", function(){
var staticView = new MyApp.StaticView();
MyApp.mainRegion.show(staticView);
});

});

在我的 app.js 中,我可以获得 evth。使用非编译模板工作得很好,像这样:
...
var template = Handlebars.compile(Template_one)
var html = template(context)
template: html
...

但是如何使用已编译的模板正确地做到这一点?

最佳答案

更新:仅使用 Handlebars 预编译器

我提到的原因Grunt较早是因为它对 LOT of things 来说非常方便.因此,在我看来,了解/了解它非常重要。

但是您可以使用 Handlebars precompiler 实现完全相同的功能。独自的:

$ handlebars templates/* -f js/precompiled.handlebars.js

你还是要整合 precompiled.handlebars.js在您的 RequireJS 配置中,请参阅答案末尾。

原文:随着咕噜声

您将需要 Grunt Task Runner为此,它使这些事情变得容易得多。

从现在开始,我假设以下文件夹结构:
project/
assets/
js/
templates/

我还假设您有 node.js安装在你的机器上!

安装 Grunt
$ cd project/assets/
$ sudo npm install grunt --save-dev

安装 Handlebars 插件

您还需要 Handlebars Grunt plugin为了预编译您的模板:
  • grunt-contrib-handlebars

  • 像这样安装它:
    $ sudo npm install grunt-contrib-handlebars --save-dev

    Gruntfile.js

    笔记:
  • A Gruntfile.js是 Grunt 的配置文件
  • 它位于 Grunt CLI 实例安装位置的根目录
  • 它是用普通的 javascript 编写的

  • 创建文件:
    $ touch Gruntfile.js

    然后复制/粘贴这个典型的 Gruntfile完成您想要实现的目标:
    module.exports = function(grunt) {

    /*
    * https://github.com/gruntjs/grunt/wiki/Configuring-tasks
    */
    grunt.initConfig({

    "handlebars": {
    compile: {
    options: {
    amd: true
    },
    src: ["templates/**/*.html"],
    dest: "js/precompiled.handlebars.js"
    }
    }

    });

    // Requires the needed plugin
    grunt.loadNpmTasks('grunt-contrib-handlebars');
    };

    所有插件选项 here .

    运行任务

    然后,假设您的模板位于 assets/templates/ , 跑:
    $ grunt handlebars:compile

    如果一切正常,您应该能够在 js/precompiled.handlebars.js 中看到您编译的模板。 :
    define([

    // Should be `handlebars.runtime.js` here
    // See: http://handlebarsjs.com/precompilation.html
    'handlebars'

    ], function(Handlebars) {

    this["JST"] = this["JST"] || {};

    this["JST"]["templates/template_one.html"] = Handlebars.template(function(Handlebars,depth0,helpers,partials,data) { /* ... */ });

    this["JST"]["templates/template_two.html"] = Handlebars.template(function(Handlebars,depth0,helpers,partials,data) { /* ... */ });

    //...

    return this["JST"];

    });

    与 RequireJS 集成

    显然,在您的 Views 中,您必须更改您的依赖项:
    define([
    'marionette',
    //'handlebars', /* You don't need this _here_ anymore */
    'js/compiled.handlebars'

    ], function(Marionette, JST) {

    /* edited for brevity */

    MyApp.StaticView = Marionette.ItemView.extend({
    template: JST["templates/template_one.html"]
    });

    MyApp.on("initialize:after", function(){
    var staticView = new MyApp.StaticView();
    MyApp.mainRegion.show(staticView);
    });
    });

    关于requirejs - 在 Marionette 中使用预编译的 Handlebars 模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19863285/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com