requirejs-为什么在define()中加载模块有效,而在require()中加载模块无效';T
代码吹不起作用,错误消息为: 未捕获错误:模块名称 尚未加载“text!templates/bookTemplate.html\u unnormalized2” 然而,对于上下文:u。使用require([]) 然后我将“text!templates/bookTemplate.html”移动到define(),它就可以工作了!以下是工作代码:requirejs-为什么在define()中加载模块有效,而在require()中加载模块无效';T,requirejs,Requirejs,代码吹不起作用,错误消息为: 未捕获错误:模块名称 尚未加载“text!templates/bookTemplate.html\u unnormalized2” 然而,对于上下文:u。使用require([]) 然后我将“text!templates/bookTemplate.html”移动到define(),它就可以工作了!以下是工作代码: define(['backbone', 'underscore', 'jquery', 'text!templates/bookTemplate.
define(['backbone', 'underscore', 'jquery',
'text!templates/bookTemplate.html'], function (Backbone, _, $, bt) {
// var bt = require('text!templates/bookTemplate.html');
var BookView = Backbone.View.extend({
initialize: function () {
this.render();
},
render: function () {
var template = _.template(bt, {
name: 'secret book'
});
console.info('template', template);
this.$el.html(template);
}
});
return BookView;
}); // it is working
根据我的理解,require()和define()在加载模块时是相同的。这是正确的吗?你能帮我解释一下为什么它在define中工作而在require()中不工作吗 您正在使用字符串文本调用
require
。当您像这样调用require
时,它会以一种方式运行。它的行为类似于同步调用,因为它将立即返回模块。它是伪同步的,因为在调用require
的伪同步形式之前必须加载模块
所以你可以这样做:
define(['backbone', 'underscore', 'jquery', 'text!templates/bookTemplate.html'],
function (Backbone, _, $) {
var bt = require('text!templates/bookTemplate.html');
它可以工作,因为模块将在require
执行之前加载。或者,您也可以使用第二段代码中显示的方法:
define(['backbone', 'underscore', 'jquery',
'text!templates/bookTemplate.html'], function (Backbone, _, $, bt) {
或者您可以使用CommonJS包装:
define(function(require, exports, module) {
var Backbone = require('backbone');
var _ = require('underscore');
var jquery = require('jquery');
var bt = require('text!templates/bookTemplate.html');
此包装工作正常,因为RequireJS将在运行时将其转换为:
define(["require", "exports", "module", "backbone", "underscore", "jquery",
"text!templates/bookTemplate.html"], function(require, exports, module) {
var Backbone = require('backbone');
var _ = require('underscore');
var jquery = require('jquery');
var bt = require('text!templates/bookTemplate.html');
在执行模块之前。我明白了。。commonJS包装也可以使用define(),但我无法将它们组合在一起。谢谢你,路易斯!
define(["require", "exports", "module", "backbone", "underscore", "jquery",
"text!templates/bookTemplate.html"], function(require, exports, module) {
var Backbone = require('backbone');
var _ = require('underscore');
var jquery = require('jquery');
var bt = require('text!templates/bookTemplate.html');