Javascript 如何将requirejs与zepto一起使用
我似乎无法让zepto与requirejs合作 这是我的档案 main.jsJavascript 如何将requirejs与zepto一起使用,javascript,backbone.js,requirejs,zepto,frontend,Javascript,Backbone.js,Requirejs,Zepto,Frontend,我似乎无法让zepto与requirejs合作 这是我的档案 main.js require.config({ paths: { zepto: 'libs/zepto/zepto.min', underscore: 'libs/underscore/underscore-min', backbone: 'libs/backbone/backbone-min', cordova: 'libs/cordova/cordova-2.1.0', history
require.config({
paths: {
zepto: 'libs/zepto/zepto.min',
underscore: 'libs/underscore/underscore-min',
backbone: 'libs/backbone/backbone-min',
cordova: 'libs/cordova/cordova-2.1.0',
history: 'libs/history/history',
historyZ: 'libs/history/history.adapter.zepto'
},
shim: {
zepto: {
exports: '$'
},
backbone: {
deps: ['underscore', 'zepto']
}}
});
require([
// Load our app module and pass it to our definition function
'app',
], function(App){
// The "app" dependency is passed in as "App"
App.initialize();
});
app.js
define([
'zepto',
'underscore',
'backbone',
'router' // Request router.js
], function($, _, Backbone, Router){
var initialize = function(){
// Pass in our Router module and call it's initialize function
Router.initialize();
}
return {
initialize: initialize
};
});
路由器.js
define([
'zepto',
'underscore',
'backbone',
'views/dashboard'
], function($, _, Backbone, DashboardView){
var AppRouter = Backbone.Router.extend({
routes: {
// Define some URL routes
'' : 'showDashboard',
}
});
var initialize = function(){
var app_router = new AppRouter;
app_router.on('showDashboard', function(){
// We have no matching route, lets just log what the URL was
//console.log('No route:', actions);
var dashboardView = new DashboardView();
dashboardView.render();
});
Backbone.history.start();
};
return {
initialize: initialize
};
});
你明白了。。但当我运行这一切时,我会在Chromes控制台中看到:
GET http://localhost/SBApp/www/js/jquery.js 404 (Not Found) require.js:1824
还有一个脚本错误(我在括号中加了bc,这不允许我发布)
在Firefox和firebug中,它会抛出一个脚本错误
是否有人成功地使用require配置了zepto,并能给我一些帮助?主干网通常有一个“define([“下划线”、“jquery”、“exports”],…”),应该只需要替换它。然后,我在zepto.js的末尾附加了以下代码片段
// If `$` is not yet defined, point it to `Zepto`
window.Zepto = Zepto
'$' in window || (window.$ = Zepto)
if ( typeof define === "function" && define.amd ) {
define( "zepto", [], function () { return Zepto; } );
}
这似乎是可行的。如果你想用jquery作为备份,(这是肮脏的),但我在zepto.js文件中将“zepto”定义为“jquery”,然后在requirejs.config中我这样做了
requirejs.config({
paths: {
// Jquery should be zepto, probably a better way to do this...
jquery: RegExp(" AppleWebKit/").test(navigator.userAgent) ? '/js/vendor/zepto' : '/js/vendor/jquery.min',
underscore: '/js/vendor/underscore.min',
backbone: '/js/vendor/backbone.min'
}
});
require(['jquery', 'underscore', 'backbone'], function($, _, Backbone) {
// Stuff here...
});
但是通过这样做,我不必为jquery修改backbone.js define文件,而且我为IE带来了浏览器支持。使用requirejs的垫片功能。看到这一点。避免每次出现这种情况时都必须编辑库的源代码。另外,您不必记得每次将库更新到新版本时都要进行编辑锡安
添加此免责声明,因为@James Watkins认为SO上的每个帖子都必须对他有效,否则应该被否决:此解决方案可能对您有效,也可能对您无效(特别是考虑到它是3年前写的!!!)您可以添加一个“extend/zepto.js”文件,而不是修改zepto.js:
/**
*扩展Zepto
*/
定义([
“泽普托”
],函数(){
“严格使用”;
window.Zepto=Zepto
//如果尚未定义“$”或“jQuery”,请将它们指向“Zepto”`
窗口| |中的“$”(窗口$=Zepto)
窗口| |中的“jQuery”(window.jQuery=Zepto)
返回Zepto;
});
然后将jquery
路径设置为extend/zepto
:
require.config({
路径:{
“jquery”:“extend/zepto”
}
})
您可以通过此样板文件和网页包使用它
resolve: { alias: {
"jquery": 'xxx/zepto.js' // or jquery.js for PC
}},
你有没有因为提到“jquery”而对你的LIB和来源进行grep?任何库都会独立地尝试包含它,这似乎非常奇怪。我确实这样做了,引用jQuery的唯一一件事就是需要。我想当我尝试使用AMD时,它会寻找它,我一直在四处寻找,发现Zepto和AMD还没有得到支持?第一部分对我帮助很大,因为它让我们可以做什么,seco第二部分我不推荐。事实上,我不推荐使用带主干的Zepto。现在有一个我没有尝试过,但看起来更有希望用主干替换jquery。修改公共库文件的源代码?这是个坏主意。我不知道你在该配置中做什么,我永远不会推荐修改这个。这是一个旧的代码示例,在那时我是如何使用它的。我不使用它。尝试将导出设置为Zeto和$,但是两个都在导入时未定义。请考虑用一个工作示例来修改您的答案。@ JAMESWATKIN我欣赏评论和改进ANS的建议。答:你记下一个回答的形式很糟糕,因为它对你不起作用,或者没有一个有效的例子。很明显,其他人发现它很有用,因为当你遇到它时,它没有0分。我想知道你所有的回答是否都有有效的例子。或者,如果杯子是半满的,对你来说,它实际上是空的y、 我试过了,但没用。这是一个记录回复的充分理由。我的评论解释了你可以如何改进。我看不出这里有什么问题。@jamesWatkins很酷。我为你修改了答案。我只是尝试推广清晰实用的答案。如果你认为你的答案很旧,不再相关,你应该反对我想删除它以避免将来的混乱。这个网站是关于获得答案,而不是分数。这是唯一一个不修改源代码的解决方案。谢谢!