我有一个利用Backbone.js的应用程序。一切工作正常,但最近我在项目中添加了RequireJS,这当然使一切都中断了,因此我正在定义依赖项并使一切重新运行。
我收到的错误是Uncaught ReferenceError: JST is not defined.
我有以下CoffeeScript视图文件。注意JST行:
define ["app"], (App) ->
Snip.Views.Appointments ||= {}
class Snip.Views.Appointments.IndexView extends Backbone.View
template: JST["backbone/templates/appointments/index"]
initialize: () ->
@options.appointments.bind('reset', @addAll)
addAll: () =>
@options.appointments.each(@addOne)
addOne: (appointment) =>
view = new Snip.Views.Appointments.AppointmentView({model : appointment})
@$("ul").append(view.render().el)
我的“ app”依赖项本身具有Backbone和Underscore作为依赖项,因此我认为问题不在于Backbone不存在:
define ["underscore", "backbone"], (_, Backbone) ->
window.Snip =
Models: {}
Collections: {}
Routers: {}
Views: {}
加载页面时,我得到
Uncaught ReferenceError: JST is not defined
。我该怎么做才能使我的脚本了解JST?
编辑:这是我的路径和东西
require
paths:
jquery: "jquery-1.7.2.min"
underscore: "lodash.min"
appointment: "backbone/models/appointment"
appointmentIndexView: "backbone/views/appointments/index_view"
appointmentsRouter: "backbone/routers/appointments_router"
relational: "backbone-relational"
shim:
"underscore":
exports: "_"
"backbone":
deps: ["underscore", "jquery"]
exports: "Backbone"
"relational":
deps: ["backbone"]
requirejs ["appointmentsRouter"], (AppointmentsRouter) ->
window.router = new Snip.Routers.AppointmentsRouter({appointments: []})
Backbone.history.start()
最佳答案
加载有问题的模块时,没有名为JST
的变量可用。
您需要将JST -library的路径添加到paths
中的require.config
属性。
然后,很可能您还需要将其添加到shim
并使其导出JST
。
在require.js中,当您使用尚未使用的模块中的某些外部资源时,您的警钟应开始响起
A.导入到该模块的define
部分
B.通过require
导入到该模块内
C.在您的require.config
功能中提到
更新
您需要制作一个新模块(例如templates.js),该模块返回一个变量(例如JST
)。
define([
...
], function( ... ) {
var JST = {};
JST['template/name'] = "<div class='my-template'><%= my-content %></div>";
...
return JST;
}
然后,在模块中,您要在以下位置使用这些模板:
define([
...
'path/to/your/JST/module',
...
], function(..., JST, ...) {
// Et voilà, now you can use the templates like they should be used
});