2012-10-11 30 views
7

Tôi đang làm việc với xương sống + requirejs + jquery và tôi gặp vấn đề với tải jquery plugin trong trang html hiện tại của tôi (mẫu xương sống html precisly).Sử dụng jQuery plugin với Backbone và Requirejs

Có cấu hình đòi hỏi của tôi:

require.config({ 

    paths: { 
    // ... some code about backbone config 
    jquery: '/js/lib/jquery/jquery.min', 
    'jquery.camera' : '/js/jquery/jquery.camera' 
    }, 

    shim: { 
    // ... some code about backbone config 
    'jquery.camera': ['jquery'] 
    } 
}); 

Trong trang html bố trí của tôi, tôi có:

<script type='text/javascript' src='/js/jquery/jquery.camera.js'></script> 

và trong trang mẫu của tôi, tôi có:

<script type="text/javascript"> 
    jQuery(function() { 

    jQuery('#test').camera({ 
... 
</script> 

Cuối cùng trình duyệt của tôi mesg:

Uncaught TypeError: Object [object Object] has no method 'camera' 

Bạn có ý tưởng gì không?

Trong thời tôi có một câu hỏi khác, cách tốt nhất để bao gồm một số mã js trong trang hiện tại của chúng tôi với xương sống, requirejs vv

Cảm ơn :)

+0

Bạn có thể cung cấp mã đầy đủ không? Bạn có thể sử dụng jsfiddle.net cho việc này. Có vẻ như plugin máy ảnh jquery không được tải. Nơi tốt nhất để đặt các kịch bản JS của bạn ở cuối trang của bạn vì cách các thành phần tải xuống trình duyệt. – maxwell

Trả lời

19

tôi giải quyết một vấn đề tương tự là gì (Jquery.cookie) như thế này, nhưng vấn đề của tôi là Jquery đã được nạp và sau đó Jquery.cookie đã được đưa vào nhưng yêu cầu đã có JQuery như một tài nguyên tĩnh.

Vì vậy, như thế này tôi vượt qua Jquery.Cookie vào ứng dụng và nó chèn jquery.cookie trong phạm vi ứng dụng của tôi chỉ.

require.config({ 

    paths: { 
     'async'   : 'libs/async' 
     ,'jquery'   : 'libs/jquery' 
     ,'underscore'  : 'libs/underscore' 
     ,'backbone'  : 'libs/backbone' 
     ,'text'   : 'libs/text' 
     ,'jquery.cookie' : 'libs/jquery.cookie' // <-- cookie lives here 
    } 

    ,shim: { 
    'jquery': { 
     exports: '$' 
    } 
    ,'underscore': { 
     exports: '_' 
    } 
    ,'backbone': { 
     deps: ['underscore', 'jquery'], 
     exports: 'Backbone' 
    } 
    ,'jquery.cookie': {  //<-- cookie depends on Jquery and exports nothing 
     deps: ['jquery'] 
    } 
    } 
}); 

và sau đó trong lớp App chính tôi đã thêm

require([ 
    'jquery' 
    ,'underscore' 
    ,'backbone' 
    ,'mapApp' 
    ,'jquery.cookie' //<- this is the real trick !!! 
], 
    function ($, _, Backbone, App) { 

Sau này tôi đã có thể tìm Cookie jquery.

BTW: không cần nhập JQuery.camera vào html nếu bạn đang sử dụng Require.js để tìm nạp, trừ khi bạn sử dụng nó bên ngoài phạm vi Require.js của mình.

+0

Nó hoạt động! Cảm ơn người đàn ông bạn đá;) – Majdi

+0

Cảm ơn rất nhiều. Tôi đã tìm kiếm trên web trong ~ 2 giờ để tìm ra điều này. Điều duy nhất tôi cần làm là thêm 'jquery.cookie' vào lớp App chính. Tuy nhiên tôi cảm thấy như có một cách tốt hơn để tải các plugin jQuery, tôi không thực sự thích rằng có 5 tham số đi vào yêu cầu() và chỉ 4 được gửi đến hàm ... nhưng triển khai này hoạt động hoàn hảo cho bây giờ . Cảm ơn bạn! – skcin7

+0

bạn thậm chí không cần cấu hình shim cho jquery-cookie vì nó là một mô-đun tương thích với AMD và yêu cầu riêng của nó là jquery – explunit

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