2013-10-13 3 views
-1

Я работаю с Javascript, и я слишком долго работаю над проектом с помощью Phonegap и googlemaps, но теперь я сосредоточился на коде с Javascript, но теперь у меня есть следующий структура каталогов и скриптов внутри JS каталога:Требовать JS на разных уровнях зависимости

├── controlador 
│   └── DeviceController.js 
├── launcher.js 
├── libs 
│   ├── backbone.googlemaps.js 
│   ├── backbone.js 
│   ├── class.js 
│   ├── index.js 
│   ├── jquery.js 
│   ├── jquery.mobile.min.js 
│   ├── mustache.js 
│   ├── require.js 
│   └── underscore.js 
├── modelo 
│   └── Ubicacion.js 
└── vista 
    ├── GoogleMap.js 
    ├── Informacion.js 
    ├── MarcadorBahia.js 
    ├── MarcadorDispositivo.js 
    ├── MarcadorParqueadero.js 
    └── MarkerView.js 

Итак, я использую class library работать с объектом в JavaScript более легко, и я пытался работать с Backbone, и я сделал это example, он работает !.

Моя проблема есть, когда я пытаюсь работать с RequireJS, я не могу загрузить сценарии в правильном направлении.

Это ошибки, которые показывают мне браузер:

Uncaught ReferenceError: com is not defined launcher.js:18 
(anonymous function) launcher.js:18 
i.execCb require.js:29 
Z.check require.js:18 
(anonymous function) require.js:22 
(anonymous function) require.js:8 
(anonymous function) require.js:23 
y require.js:7 
Z.emit require.js:23 
Z.check require.js:19 
Z.enable require.js:23 
Z.init require.js:16 
E require.js:14 
i.completeLoad require.js:27 
i.onScriptLoad require.js:29 

Uncaught TypeError: Cannot read property 'Model' of undefined Ubicacion.js:11 
(anonymous function) Ubicacion.js:11 
i.execCb require.js:29 
Z.check require.js:18 
Z.enable require.js:23 
Z.init require.js:16 
(anonymous function) 

Это код точки входа моего приложения, то launcher.js:

require.config({ 
    paths:{ 
     jquery  : 'libs/jquery', 
     googlemapapi: 'https://maps.googleapis.com/maps/api/js?key=AIzaSyC35BOQq2RvkKjzh0NhohKbQtUa3KWBM1o&sensor=false', 
     underscore : 'libs/underscore', 
     backbone : 'libs/backbone', 
     mustache : 'libs/mustache', 
     class  : 'libs/class', 
     ubicacion : 'modelo/Ubicacion', // this class I required by DeviceController 
     deviceController: 'controlador/DeviceController' 
    } 
}); 

require(['jquery', 'underscore', 'backbone', 'mustache', 'class','ubicacion','deviceController' ], 
function($, _,Backbone,Mustache) 
{ 
    var deviceController = new com.gcvv.bsp.controller.DeviceController(); 
}); 

В Класс DeviceController:

require(['jquery', 'underscore', 'backbone','class','ubicacion' ], 
function($, _, Backbone){ 

$namespace("com.gcvv.bsp.controller"); 

$class("com.gcvv.bsp.controller.DeviceController",{ 
    $constructor: function(){ 
     this.ubicacion = com.gcvv.bsp.modelo.Ubicacion(0,0); 
    }, 
    getPosicionActual: function() 
    { 
     if(navigator.geolocation){ 
      navigator.geolocation.getCurrentPosition(this.localizacion, this.error); 
     }else{ 
      console.error("El dispositivo no soporta geolocalizacion"); 
     } 
    }, 
    localizacion : function(posicion){ 
     this.ubication.set('longitud',posicion.coords.latitude); 
     this.ubication.set('latitud', posicion.coords.longitude); 
    }, 
    error : function(){ 
     console.error("Error al obtener la gelocalización del dispositivo"); 
    } 
}); 

}); 

это код Ubicacion.js:

require(['jquery', 'underscore', 'backbone','class'], 
function($, _, Backbone) { 
$namespace("com.gcvv.bsp.modelo"); 
$class("com.gcvv.bsp.modelo.Ubicacion",{ 
    $extends: Backbone.Model, 
    defaults: { 
     longitud: 0, 
     latitude: 0 
    } 
}); 
}); 

Я пытаюсь сделать модульное тестирование, чтобы понять, что проблема является уровень контекста для определения зависимостей (хорошо я предполагаю, что это), я попробуйте следующие вещи:

  1. Я использую класс внутри DeviceController (ubicación), чтобы проверить, что это работает мелкий
  2. в классе ubicación я удалить Постулаты из требуете.
require.config({ 
    paths:{ 
     jquery  : 'libs/jquery', 
     googlemapapi: 'https://maps.googleapis.com/maps/api/js?key=AIzaSyC35BOQq2RvkKjzh0NhohKbQtUa3KWBM1o&sensor=false', 
     underscore : 'libs/underscore', 
     backbone : 'libs/backbone', 
     mustache : 'libs/mustache', 
     class  : 'libs/class', 
     ubicacion : 'modelo/Ubicacion', 
     deviceController: 'controlador/DeviceController' 
    } 
}); 

require(['jquery', 'underscore', 'backbone', 'mustache', 'class','ubicacion','deviceController' ], 
function($, _,Backbone,Mustache, $class, Ubicacion ) 
{ 
    var ubicacion = new com.gcvv.bsp.modelo.Ubicacion(); 
    console.log(ubicacion.get('longitud')); //I get 0, default value 
}); 

Итак, класс ubicación с изменениями:

$namespace("com.gcvv.bsp.modelo"); 
$class("com.gcvv.bsp.modelo.Ubicacion",{ 
    $extends: Backbone.Model, 
    defaults: { 
     longitud: 0, 
     latitude: 0 
    } 
}); 

Что я делаю неправильно?

Как определить правильную структуру требуемых зависимостей в каждом файле, который мне нужно использовать?

Как мне сделать, если я использую те же зависимости в разных сценариях, чтобы не перезагружать?

Как мне сделать, если я использую те же зависимости в разных сценариях, чтобы они не конфликтуют?

Как определить правильную структуру точки входа моего приложения?

ответ

Смежные вопросы