6

我似乎无法让 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();
});

应用程序.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

和一个脚本错误(我在括号中加上了这不会让我发布。)

在带有 firebug 的 Firefox 中,它会吐出一个 scripterror

有没有人成功地用 require 配置了 zepto 并且可以给我一些帮助?

4

4 回答 4

2

使用 requirejs 的 shim 功能。看到这个答案。避免每次发生这种情况时都必须编辑库的源代码。另外,您不必记住每次将库更新到较新版本时都进行编辑。

添加此免责声明,因为@James Watkins 认为 SO 上的每个帖子都必须为他工作,否则它应该被否决:这个解决方案可能对你有用,也可能不适合你(特别是考虑到它是3 年前写的!!!

于 2013-06-24T18:02:23.693 回答
1

Backbone 通常有一个 "define(["underscore","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 修改主干.js 定义文件,并且我引入了对 IE 的浏览器支持......

于 2012-12-18T20:34:21.370 回答
1

您可以添加一个 'extend/zepto.js' 文件而不是修改 Zepto.js:

/**
 * extend Zepto
 */

define([
  'zepto'
], function() {

  "use strict";

  window.Zepto = Zepto
  // If `$` or `jQuery` is not yet defined, point them to `Zepto`
  '$' in window || (window.$ = Zepto)
  'jQuery' in window || (window.jQuery = Zepto)

  return Zepto;

});

然后将jquery路径设置为extend/zepto

require.config({
  paths: {
    'jquery': 'extend/zepto'
  }
})
于 2014-07-12T02:15:11.430 回答
0

https://github.com/l-zhi/html5-backbone-boilerplate你可以通过这个带有 webpack 的样板来使用它

resolve: { alias: {
     "jquery": 'xxx/zepto.js' // or jquery.js for PC
}},
于 2016-05-29T03:19:59.293 回答