JST未定义 - Yeoman,Backbone - 无法加载模板

时间:2015-02-18 05:57:28

标签: backbone.js requirejs handlebars.js yeoman yeoman-generator

是Yeoman的新手,我使用generator-backbone

生成了一个Backbone应用程序

这是我的main.js(需要js配置)

/*global require*/
'use strict';
require.config({
    shim: {,
        handlebars: {
            exports: 'Handlebars'
        }
    },
    paths: {
        jquery: '../bower_components/jquery/dist/jquery',
        backbone: '../bower_components/backbone/backbone',
        underscore: '../bower_components/lodash/dist/lodash',
        handlebars: '../bower_components/handlebars/handlebars'
    }
});

require([
    'backbone'
], function (Backbone) {
    Backbone.history.start();
});

现在我使用 yo backbone创建了一个视图:查看登录

这是生成的视图

define([
    'jquery',
    'underscore',
    'backbone',
    'templates'
], function ($, _, Backbone, JST) {
    'use strict';

    var LoginViewView = Backbone.View.extend({
        template: JST['app/scripts/templates/LoginView.hbs'],

        tagName: 'div',

        id: '',

        className: '',

        events: {},

        initialize: function () {
            this.listenTo(this.model, 'change', this.render);
        },

        render: function () {
            this.$el.html(this.template(this.model.toJSON()));
        }
    });

    return LoginView;
});

当我使用LoginView运行应用程序时,出现错误

Error: Script error for: templates http://requirejs.org/docs/errors.html#scripterror

显然我看到模板没有在main.js中定义的位置。运行yeoman发电机时我错过了什么

1 个答案:

答案 0 :(得分:1)

如果你犯了同样的错误,比如m,那就验证一下

生成代码后,如果其显示模板未定义或您发现缺少template.js,请检查以下步骤

  1. 运行 grunt把手(如果您想忽略任何警告/错误,请加入--force
  2. 这将预编译.hbs文件制作一个template.js文件。
  3. 但是这里的问题是,它不会开箱即用,template.js写在app/.tmp/scripts/template.js位置。

    您可以相应地修改main require配置文件,或者打开GruntFile.js并修改此功能

    grunt.registerTask('createDefaultTemplate', function () {
            grunt.file.write('/your/custom/path/to/templates.js', 'this.JST = this.JST || {};');
        });
    

    同时验证你是否在GruntFile.js中有这一行

    grunt.loadNpmTasks('grunt-contrib-handlebars');
    

    如果没有,请在最后添加(当然不是在功能块之后)