2016-01-04 3 views
0

У меня возникла проблема с подключением некоторых классов типов с использованием RequireJs. В файлах .ts я использую синтаксис модулей и модули AMD. И мой основной файл - GameLoader.ts, который возвращает экземпляр игры. Там, например, я creaiting World экземпляр:Загрузка некоторых типов машинописных модулей с requireJS

import World = require('Resources/Scripts/Game/Entities/Game/World'); 
... 
var world = new World(json.world.level, json.world.size, json.world.passMap); 

и она отлично работает - World действительно нужную функцию

Но в то же тот же файл (GameLoader.ts):

import Camera = require('Resources/Scripts/Game/Presentation/Camera/Camera'); 
... 
var camera = new Camera(); 

Камера - пустой объект (вместо функции)Uncaught TypeError: Камера не является функцией Файл загружен, но отладчик показал, что его содержимое a re not used - точка останова в определении функции не работает. Но в мировой точке останова запускается до загрузки основной программы.

Обнаружение ошибки Я попытался удалить все вещи с Camera.ts. После удаления я назвал пустую камеру таким же образом из другого файла (temp.ts):

import c = require('Resources/Scripts/Game/Presentation/Camera/Camera'); 
var cam = new c(); 
console.log(cam); 

, и она работала.

Ts-сгенерированный код с помощью компилятора (для Camera.js) в обоих случаях выглядит одинаково. Для вызова скомпилированных файлов используется тот же путь - по вызову RequireJs API.

Возможно, проблема связана с циклическими ссылками, указывающими на файл GameLoader? Но мое приложение, построенное из классов, игра которых (экземпляр которого экспортируется из GameLoader) используется только в их экземплярах.

Извините за мой плохой английский.

+1

Имеет ли камера функцию определения и возвращает ли она правильный объект? – rainerhahnekamp

+0

Да. Camera.js начинается с функции определения. Она возвращает ref на функцию камеры (класс в TS). Но почему-то в GameLoader это просто пустой объект. –

ответ

1

Perhaps the problem is cyclical references that point to a file GameLoader?

Возможно. Дайте вид зависимости в atom-typescript a go https://github.com/TypeStrong/atom-typescript#dependency-view

+0

Я попытался установить атом и этот плагин, но он вообще не распознает инструкцию импорта даже после установки tsconfig. Поэтому я предпочитаю VS или VS Code. Там все хорошо для меня. Теперь циклические ссылки: камера импортирует CameraBehaviour с импортом GameLoader. Это необходимо для настройки уровня считывания для коррекции положения камеры. Is RequireJs не может справиться с этим? –

+0

Да, вы можете получить неопределенный при начальной загрузке http://requirejs.org/docs/api.html#circular – basarat

0

Я выстрелил в ногу с RequireJs. Проблема там, что я попытался вернуть экземпляр из общего модуля. И каждая зависимость пыталась создать новую. Так что в первый раз - в моем случае - некоторые модули пропустили нагрузку на другую ступень депо.

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

  • Нет связанных вопросов^_^