首页 文章

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

提问于
浏览
0

我是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:view Login 创建了一个视图

这是生成的视图

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

显然我看到 templates 没有在main.js中定义的位置 . 运行自耕农发电机时我错过了什么

1 回答

  • 1

    如果你像m那样犯了同样的错误,那就试试吧

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

    • 运行 grunt handlebars (如果要忽略任何警告/错误,请包括 --force

    • 这将预编译.hbs文件制作单个 template.js 文件 .

    但是这里的问题是,它不会开箱即用,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');
    

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

相关问题