Search code examples
backbone.jsinternet-explorer-8requirejs

No Define call for backbone


I have a backbone + requirejs app. I am getting this No Define call for backbone in IE8

I have enabled enforceDefine for app support in IE8

Require Config file

define([], function(){

require.config({
  enforceDefine : true,
  shim: {
  "underscore": {
    deps: [],
    exports: "_"
  },
  "backbone": {
    deps: ["jquery", "underscore"],
    exports: "Backbone"
  },
  ...
  },
  baseUrl : 'scripts/',
  paths: {
    backbone        : '../libs/backbone/backbone',  
    jquery          : '../libs/jquery/dist/jquery',
    underscore      : '../libs/underscore/underscore'
  }
 });
});

Solution

  • In your html file:

    <doctype!>
    <html>
    ...
    <!-- You can load config ahead of require -->
    <script type="text/javascript">
    require.config({
      enforceDefine : true, // +1 for this in IE 8!!
      shim: {
      "underscore": {
        deps: [],
        exports: "_"
      },
      "backbone": {
        deps: ["jquery", "underscore"],
        exports: "Backbone"
      },
      ...
      },
      baseUrl : 'scripts/',
      paths: {
        backbone        : '../libs/backbone/backbone',  
        jquery          : '../libs/jquery/dist/jquery',
        underscore      : '../libs/underscore/underscore'
      }
     });
    </script>
    <script data-main="entry-point.js" src="path/to/require.js"></script>
    

    In entry-point.js

    define([deps1, deps2], function(Dep1, Dep2){
    ...
    });
    

    Additionally, it is worthwhile to take a look at various ways to separate config from main