2012-11-16 33 views
6

Tôi dường như không thể có được zepto để làm việc với requirejs.Làm thế nào để sử dụng requirejs với zepto

Dưới đây là tác phẩm của tôi

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

Bạn nhận được các hình ảnh .. Nhưng khi Tôi chạy tất cả, tôi nhận được điều này trong Chromes con duy nhất:

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

và một lỗi kịch bản (Tôi đã ném trong ngoặc bc này wouldnt cho tôi gửi.)

và trong Firefox với con đom đóm, nó spits ra một scripterror

Có ai đã thành công cấu hình zepto với yêu cầu và có thể ném cho tôi một số trợ giúp?

+0

Bạn grep libs và nguồn của bạn cho bất kỳ đề cập đến "jquery"? Có vẻ kỳ lạ là bất kỳ lib nào sẽ độc lập cố gắng đưa nó vào. – numbers1311407

+0

Tôi đã làm và điều duy nhất được tham chiếu jQuery là bắt buộc.Tôi đoán khi tôi cố gắng sử dụng AMD với nó, nó tìm kiếm nó và tôi đã nhìn xung quanh một chút nhìn thấy theres không có hỗ trợ cho Zepto và AMD chưa? –

Trả lời

1

Xương sống thường có "xác định ([" dấu gạch dưới "," jquery "," xuất ""], .. "trong đó, chỉ cần phải thay thế. Sau đó, tôi nối đoạn mã sau vào cuối 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; }); 
} 

có vẻ như để làm việc. Nếu bạn muốn có jquery như một sao lưu, (đây là bẩn) nhưng tôi định nghĩa "Zepto" là "jquery" trong tập tin zepto.js, sau đó trong requirejs.config Tôi đã làm điều này ...

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

Nhưng bằng cách đó tôi không phải sửa đổi tệp backbone.js xác định cho jquery và tôi broug ht trong trình duyệt hỗ trợ cho IE ...

+0

Phần đầu tiên giúp tôi rất nhiều bởi vì nó làm cho những gì supers để làm, thứ hai tôi đã không cố gắng – daver

+1

Vâng, phần thứ hai tôi không khuyên bạn nên. Trên thực tế tôi không khuyên bạn nên sử dụng Zepto với Backbone. Hiện tại có [Backbone.native] (https://github.com/inkling/backbone.native) mà tôi không thử nhưng trông có vẻ hứa hẹn hơn về việc thay thế jquery bằng xương sống. – gwing33

+0

Sửa đổi mã nguồn của một tệp thư viện phổ biến? Đó là một ý tưởng tồi. Và tôi không biết bạn đang làm gì trong cấu hình đó, tôi sẽ không bao giờ đề nghị điều này. –

2

Sử dụng tính năng shim của requirejs. Xem này answer. Tránh phải chỉnh sửa nguồn của thư viện mỗi khi tình huống này xảy ra. Ngoài ra, bạn không cần phải nhớ chỉnh sửa mỗi khi bạn cập nhật thư viện lên phiên bản mới hơn.

Thêm tuyên bố từ chối trách nhiệm này, vì @James Watkins cho rằng mọi bài đăng trên SO phải làm việc cho anh ấy nếu không nó sẽ bị giảm bớt: Giải pháp này có thể có hoặc không hoạt động cho bạn (đặc biệt là xem xét nó được viết 3 năm trước !!!)

+0

Điều này không hiệu quả đối với tôi. Đã cố gắng thiết lập xuất khẩu sang Zepto và $ nhưng cả hai đều không xác định khi nhập. Xem xét sửa đổi câu trả lời của bạn bằng một ví dụ làm việc. –

+0

@JamesWatkins Tôi đánh giá cao nhận xét và đề xuất cải thiện câu trả lời. Đó là hình thức nghèo mặc dù cho bạn để đánh dấu một phản ứng bởi vì nó không làm việc cho bạn, hoặc không có một ví dụ làm việc. Rõ ràng, những người khác thấy nó hữu ích vì nó không có 0 điểm khi bạn đến nó. Tôi phải tự hỏi nếu tất cả các câu trả lời của bạn trên SO có ví dụ làm việc. Hoặc có lẽ nếu thủy tinh là một nửa đầy đủ, với bạn nó thực sự trống rỗng. –

+0

Tôi đã thử nó và nó không hoạt động. Đó là một lý do đủ hợp lệ để đánh dấu phản hồi. Nhận xét của tôi giải thích cách bạn có thể cải thiện. Tôi không thấy vấn đề ở đây. –

1

Bạn có thể thêm một 'mở rộng/zepto.js' tập tin thay vì sửa đổi 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; 

}); 

Sau đó thiết lập đường dẫn đến jqueryextend/zepto:

require.config({ 
    paths: { 
    'jquery': 'extend/zepto' 
    } 
}) 
+0

Đây là giải pháp duy nhất làm việc cho tôi mà không cần sửa đổi mã nguồn. Cảm ơn! –

Các vấn đề liên quan