Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何将requirejs与zepto一起使用_Javascript_Backbone.js_Requirejs_Zepto_Frontend - Fatal编程技术网

Javascript 如何将requirejs与zepto一起使用

Javascript 如何将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

我似乎无法让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: '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很酷。我为你修改了答案。我只是尝试推广清晰实用的答案。如果你认为你的答案很旧,不再相关,你应该反对我想删除它以避免将来的混乱。这个网站是关于获得答案,而不是分数。这是唯一一个不修改源代码的解决方案。谢谢!