2012-11-16 79 views
6

我似乎無法得到zepto與requirejs一起使用。如何使用requirejs與zepto

這裏是我的文件

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 
    }; 
}); 

router.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 con。中得到這個獨家:

GET http://localhost/SBApp/www/js/jquery.js 404 (Not Found)   require.js:1824 

和腳本錯誤(我在括號扔BC這wouldnt讓我發表。)

,並在Firefox使用Firebug,它吐出scripterror

任何人都有成功配置zepto與要求,可以給我一些幫助?

+0

你用grep你的庫和來源的「jQuery的」任何提及?似乎奇怪的是,任何lib都會獨立嘗試包含它。 – numbers1311407

+0

我做了,唯一引用jQuery的東西是需要的。我想當我嘗試使用AMD時,它會尋找它,並且我一直在環顧四周,看不到Zepto和AMD的支持嗎? –

回答

1

主幹通常有一個「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文件中定義的「仄」作爲「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... 
}); 

但這樣做,我沒有修改Backbone.js的定義文件jQuery和我broug在瀏覽器中支持IE瀏覽器......

+0

第一部分幫助我很多,因爲它使什麼supouse做,第二我沒有嘗試 – daver

+1

是的,第二部分我不建議。其實我不推薦使用Zepto和Backbone。現在有[Backbone.native](https://github.com/inkling/backbone.native),我沒有嘗試過,但看起來更有希望用主幹替換jquery。 – gwing33

+0

修改公共庫文件的源代碼?這是一個壞主意。我不知道你在配置中做什麼,我絕不會推薦這個。 –

2

使用requirejs的填充功能。看到這個answer。避免每次出現這種情況都必須編輯庫的源代碼。另外,每次將庫更新到新版本時,您都不必記得進行編輯。

添加此免責聲明,因爲@詹姆斯沃特金斯認爲對SO每一個崗位必須爲他,否則應該downvoted工作:該解決方案可能會或可能不會爲你工作(特別是考慮到它是3年前寫的

+0

這不適合我。試圖將出口設置爲Zepto和$,但兩者在導入時都未定義。考慮用一個工作示例修改你的答案。 –

+0

@JamesWatkins我很欣賞評論和改進答案的建議。儘管你可以標記迴應,但因爲它不適合你,或者沒有一個可行的例子,這種形式很糟糕。顯然,其他人發現它很有用,因爲當你遇到它時沒有0分。我不得不懷疑你的所有迴應是否有實例。或者,如果杯子是半滿的,對你來說它實際上是空的。 –

+0

我試過了,它沒有工作。這是一個有效的理由來標記迴應。我的評論解釋了你可以怎樣改進。我在這裏看不到問題。 –

1

您可以添加一個 '擴展/ 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' 
    } 
}) 
+0

這是唯一能夠在不修改源代碼的情況下爲我工作的解決方案。謝謝! –