我有一个利用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

});

09-25 15:50