Marionette.js Require.js模板路径错误

时间:2014-03-29 23:47:48

标签: javascript node.js requirejs marionette underscore.js-templating

我的tpl有以下目录结构:

-src
    -assets
        -js
            -lib
                [files]
            -src
                -templates
                    -common
                        builder_regions.tpl

我的require.config是:

require.config({
    baseUrl:'src/assets/js',
    paths: {
        backbone:               'lib/backbone',
        jquery:                 'lib/jquery.min',
        'jquery-ui':            'lib/jquery-ui-1.10.4.custom.min',
        underscore:             'lib/underscore.min',
        modernizr:              'lib/modernizr.min',
        'magnific-popup':       'lib/magnific-popup.min',
        text:                   'src/assets/jslib/text',
        marionette:             'lib/backbone.marionette.min',
        tpl:                    'lib/underscore-tpl'
    },
    shim: {
        jquery: {
            exports:            '$'
        },
        underscore: {
            exports:            '_'
        },
        backbone: {
            deps:               [ 'jquery', 'underscore' ],
            exports:            'Backbone'
        },
        marionette: {
            deps:               [ 'jquery', 'underscore', 'backbone' ],
            exports:            'Marionette'
        },
        'jquery-ui': {
            deps:               [ 'jquery' ],
            exports:            '$ui'
        },
        'magnific-popup': {
            deps:               [ 'jquery' ],
            exports:            'magnificPopup'
        },
        tpl:                    [ 'text' ]
    }
});

我的需求模块设置为:

define([ 'tpl!src/templates/common/builder_regions.tpl', function( Marionette, layoutTpl ) {
    console.log( 'did not throw' );
});

当我访问模块时,我收到以下错误:

GET http://localhost:3000/src/assets/js/src/tpl.js 404 (Not Found)

为什么在require.config中提供路径时引用了文件tpl.js?谢谢!

2 个答案:

答案 0 :(得分:0)

如果您的underscore-tpl.jsthis one,那么您不需要shim配置,因为它会自行调用define。如果对不需要垫片的东西使用shim配置,RequireJS可能会表现得很奇怪。

另一件与您在此报告的问题无关但可能让您遇到麻烦的事情:jQuery至少从版本1.9开始就不需要shim。因此,如果您使用的版本是> = 1.9,则应移除shim所拥有的jquery

答案 1 :(得分:0)

试试这个:

 define(['marionette', 'tpl!src/templates/common/builder_regions.tpl'], function( Marionette, layoutTpl ) {
        console.log( 'did not throw' );
    });