2013-06-23 44 views
1

在清除我的缓存后的应用程序的初始负载我得到一个jquery未定义bc应用程序正试图加载jquery验证之前jquery已加载。刷新后,所有内容都可以加载并正常工作。我以为我正确设置了这一点,但我错过了什么?使用backbone.js,require.js和jquery。脚本加载顺序错误 - require.js

Main.js:

require.config({ 
    paths: { 
    'jquery': 'libs/jquery/jquery-min', 
    'underscore': 'libs/underscore/underscore-min', 
    'backbone': 'libs/backbone/backbone-min', 
    'validate': 'jquery.validate-1.11.1.min', 
    'templates': '../templates' 
    }, 

shim: { 
    jquery: { 
    exports: "jquery" 
    }, 
    underscore: { 
    exports: '_' 
    }, 
    backbone: { 
    deps: ['underscore', 'jquery'], 
    exports: "backbone" 
    }, 
    validate: { 
    deps: ['jquery'], 
    exports: "validate" 
    } 
}, 

}); 

require([ 
    'app' 

], function(App){ 
    App.initialize(); 
}); 

App.js

define([ 
    'jquery', 
    'underscore', 
    'backbone', 
    'validate', 
    'router', 
    'scripts' 
], function($, _, Backbone, validate, Router, scripts){ 
var initialize = function(){ 
    Router.initialize(); 
}; 

return { 
    initialize: initialize 
}; 
}); 

这里是我的文件更新,但仍然没有运气:

require.config({ 
    paths: { 
'jquery': 'libs/jquery/jquery-min', 
'underscore': 'libs/underscore/underscore-min', 
'backbone': 'libs/backbone/backbone-min', 
    'validate': 'jquery.validate-1.11.1.min', 
'templates': '../templates' 
    }, 

shim: { 
    underscore: { 
    exports: '_' 
    }, 
    backbone: { 
    deps: ['underscore', 'jquery'], 
    exports: "Backbone" 
    }, 
    validate: { 
    deps: ['jquery', 'backbone'], 
    exports: "validate" 
    } 
} 

}); 

require([ 
    'app' 
], function(App){ 
    App.initialize(); 
}); 

应用.js

define([ 
    'jquery', 
    'underscore', 
    'backbone', 
    'validate', 
    'router', 
    'scripts' 
], function($, _, Backbone, validate, Router, scripts){ 
    var initialize = function(){ 
Router.initialize(); 
    }; 

return { 
    initialize: initialize 
    }; 
}); 
+0

我检查了firebug html,它看起来像脚本正确的顺序加载 - 要求,主要,应用程序,jquery,下划线,骨干,验证,但我仍然得到的jquery是未定义错误的验证插件。 – user1572796

回答

0

你从哪里得到了回报?你可以粘贴一个堆栈跟踪?

还值得检查的是jQuery的网址。在浏览器中键入你的jquery的URL(以'libs/jquery/jquery-min'结尾'),看看它是否可以找到。

+0

感谢您的回复,jquery在那里,并加载罚款 – user1572796

0

exports必须具有第三方脚本所期望的相同类型的情况。在这种情况下:jQueryBackbone

require.config({ 
    paths: { 
     'jquery': 'libs/jquery/jquery-min', 
     'underscore': 'libs/underscore/underscore-min', 
     'backbone': 'libs/backbone/backbone-min', 
     'validate': 'jquery.validate-1.11.1.min', 
     'templates': '../templates' 
    }, 
    shim: { 
     jquery: { 
      exports: "jQuery" 
     }, 
      underscore: { 
      exports: '_' 
     }, 
     backbone: { 
      deps: ['underscore', 'jquery'], 
      exports: "Backbone" 
     }, 
     validate: { 
      deps: ['jquery'], 
      exports: "validate" 
     } 
    }, 
}); 
+0

感谢您的答复,改变了出口,它似乎没有任何影响 – user1572796

+0

您是否删除浏览器缓存? – orange

+0

是的,甚至双重检查了最新的加载进来的萤火虫。我确定这是简单的,我忽略了。 – user1572796

0

exports属性需要匹配全局属性名称 - jQuery中的情况下,它需要要么$jQuery。对于骨干网,它需要是Backbone

你也不需要使用jQuery来减震 - 它已经通过命名定义与AMD兼容了很长一段时间。请参阅https://github.com/jquery/jquery/blob/master/src/exports.js#L15-L17

+0

谢谢,更新了属性名称并删除了jquery shim,但仍然没有运气 – user1572796

1

jquery验证从这里看到的是由$ .validate()调用的插件。

在这种情况下,您不需要进行任何导出。

你可以试试,看看这是否是对你有帮助:

shim: { 
     validate: { 
      deps: ['jquery'] 
     } 
    } 

你也可以看到,以供参考类似计算器的问题:How to make a jQuery plugin loadable with requirejs

-3

感谢您的答复,我相信您的反馈固定我会遇到一些其他问题。看起来我使用的是require.js 0.27.0的一个非常旧的版本,并且升级到最新版本修复了jquery问题。