2013-11-20 15 views
5

chcę użyć wtyczki DataTables jquery do jednego z mojego stołu, który jest dynamicznie generowanych przy użyciu backbone.jsKonfiguracja jquery DataTable z require.js i korzystania z backbone.js

Po zwiedzaniu opcje konfigurowania dataTable z wymagać. js wyszedłem z tego rozwiązania

to jest z moich main.js złożyć

require.config({ 
    baseUrl : 'js', 
    paths: { 
     jquery: '../../assets/js/libs/jquery/jquery-1.10.2.min', 
     underscore: '../../assets/js/libs/underscore/underscore', 
     backbone: '../../assets/js/libs/backbone/backbone', 
     dataTable : '../../assets/js/libs/jquery/jquery.dataTables.min.js' 
    }, 

    shim : { 

     backbone : { 
      deps : [ "underscore", "jquery" ], 
      exports : "Backbone" 
     }, 

     underscore : { 
      exports : "_" 
     }, 

     dataTable : { 
      deps : ["jquery"], 
      exports : "Datatable" 
     } 

    }, 

}); 

Uruchamianie zapisu do tej konfiguracji aplikacji działa idealnie, ale po użyciu tego obiektu w moich app.js przerywa normalny przepływ zgłoszenie

define([ 
     'jquery','underscore', 'backbone', 'router', 'dataTable' 
     ], 

function($, _, Backbone, Router, Datatable) { 

    var initialize = function() { 

     // calls router.js's initialize() function 
     Router.initialize(); 

    } 

    return { 
     initialize : initialize 
    }; 

}); 

pojawia się następujący błąd w Firebug

Error: Błąd skryptu dla: DataTable http://requirejs.org/docs/errors.html#scripterror

i jeśli nie zawierają DataTable w moich app.js następnie uzyskać

$ (...). dataTable nie jest funkcją

Czy ktoś może mi pomóc w ustaleniu, co jest nie tak.

Odpowiedz

0

DataTables (jak jquery) jest już zgodny z AMD, usuń go z konfiguracji Shim.

+0

ale w jaki sposób udostępnić go na stronie, gdzie naprawdę trzeba go !!! Wszędzie, gdzie go użyłem, sprawi, że dataTable nie jest błędem funkcji – rkj

+0

@rjk czy udało Ci się sprawić, żeby działało? Jeśli tak, możesz podzielić się z nami swoją odpowiedzią pod adresem –

+2

@MarcelDjaman Ramon. W skrócie, klucz obiektu wewnątrz obiektu ścieżek modułu danych powinien być ** dokładnie ** "datatables". –

11

Nie musisz wykonywać shim w konfiguracji requireJS dla wtyczki dataTables, ponieważ jest to już moduł AMD, po prostu zmień klucz z dataTable na datatables w twoich definicjach ścieżek, powodem jest to, że moduł AMD do niego jest zdefiniowany z tą nazwą, proszę spojrzeć na kod źródłowy here.

require.config({ 
    baseUrl : 'js', 
    paths: { 
     jquery: '../../assets/js/libs/jquery/jquery-1.10.2.min', 
     underscore: '../../assets/js/libs/underscore/underscore', 
     backbone: '../../assets/js/libs/backbone/backbone', 
     datatables : '../../assets/js/libs/jquery/jquery.dataTables.min.js' 
    }, 

    shim : { 

     backbone : { 
      deps : [ "underscore", "jquery" ], 
      exports : "Backbone" 
     }, 

     underscore : { 
      exports : "_" 
     } 

    }, 

}); 

Teraz podczas importowania DataTables plugin funkcja $("selector").dataTable() będzie dostępny

define(['jquery','underscore', 'backbone', 'router', 'datatables'],  
function($, _, Backbone, Router) { 

    var initialize = function() { 

     // calls router.js's initialize() function 
     Router.initialize(); 

    } 

    return { 
     initialize : initialize 
    }; 

});