2013-02-12 117 views
1

我加载require.js用jQuery包括像这样我的html:Require.js与jQueryMobile-路由器

<script data-main="requires" src="lib/require-jquery.js"></script> 

我requires.js的内容:

require.config({ 
     paths: { 
      "jquery.mobile": "lib/jquery.mobile", 
      "jquery.mobile.router": "lib/jquery.mobile.router" 

     }, 
     shim: { 
      "jquery.mobile" : { 
       "exports": "$.mobile" 
      }, 
      "jquery.mobile.router": { 
        "deps": [ "jquery.mobile" ], 
        "exports": "$.mobile.Router" 
      } 

     } 

}); 

require(["jquery.mobile.router" ], function() { 
    require(["router"]); 
}); 

而且在我的路由器.js文件我创建了jquery mobile router plugin的新实例:

router = new $.mobile.Router(...); 

这给了我这个错误:

Uncaught TypeError: undefined is not a function

当我输出$和$ .mobile时,它们都被定义了,只是$ .mobile.Router是未定义的。

我在这里做了什么错?

回答

2

我的问题是,我加入jquery.mobile作为jquery.mobile.router依赖性,从而jQuery的移动将首先被加载,其中作为用于路由器状态的文档这样的:

The jQuery Mobile router javascript file must be loaded before jQuery Mobile.

这是我如何改变了我的requires.js来解决这个问题:

require.config({ 

    paths: { 
     "jquery.mobile": "lib/jquery.mobile", 
     "jquery.mobile.router": "lib/jquery.mobile.router" 
    }, 

    shim: { 
     "router": { 
      "deps" : ["jquery.mobile"] 
     }, 
     "jquery.mobile" : { 
      "deps" : [ "jquery.mobile.router"], 
      "exports": "$.mobile" 
     }, 

     "jquery.mobile.router": { 
      "exports": "$.mobile.Router" 
     } 
    } 
}); 

require(["router"]); 

现在我只需要我的router.js和负载jquery.mobile和jquery.mobile.router的依赖关系。加载顺序现在是这样的:

  1. jquery.mobile.router
  2. jquery.mobile
  3. 路由器
1

router.js文件试试这个: -

define(["jquery", "jquery.mobile.router"], function($) { 
    // your js code in router.js 
}); 

通过在您的定义呼叫指定jquery$作为参数传递,jQuery对象$jquery.mobile.router定义的相关功能现在在提供您的代码范围(包含在文件router.js中)。