2015-03-25 4 views
8

Я пытаюсь использовать MovilizerJS с Ionic Framework для создания экрана HTML5. Я пытаюсь ссылаться на te MovilizerJS из файлов App.js, сгенерированных Ionic. Я добавил файлы MovilizerJS в папку плагинов и добавил файл Cordova.js, содержащий.Movilizer - Использование MovilizerJS с Ionic

var oHead = document.getElementsByTagName('HEAD').item(0); 
var oScript = document.createElement("script"); 
oScript.type = "text/javascript"; 
oScript.src = "plugins/Movilizer.js"; 
oHead.appendChild(oScript); 

Кажется, однако, что, когда я загрузить страницу HTML5 в браузере (или вид html5 в movelet) MovilizerJS не загружаются. В браузере появляется следующая ошибка:

Модуль «движитель» недоступен!

Возможно, мне нужно добавить это как модуль в угловую структуру, но когда я пытаюсь добавить его в модули, он все равно дает мне ошибки. Мои HTML файл содержит скрипт-тег для movilizer:

<script src="plugins/Movilizer.js"></script> 

Мой App.js код в настоящее время выглядит следующим образом:

angular.module('starter', ['ionic']) 
.run(function($ionicPlatform) { 
     $ionicPlatform.ready(function() { 
     // Hide the accessory bar by default (remove this to show the accessory bar above the keyboard 
     // for form inputs) 
     if(window.cordova && window.cordova.plugins.Keyboard) { 
      cordova.plugins.Keyboard.hideKeyboardAccessoryBar(true); 
     } 
     if(window.StatusBar) { 
      StatusBar.styleDefault(); 
     } 

     }); 
    }).factory('MovilizerExtender', function ($rootScope) { 
     return { 
     startUpMovilizer: function(){ 
      movilizer.readGlobalVariable("testTable",this.successCallback,this.errorCallback); 
     }, 
     successCallback: function(result){ 
      $rootScope.routestops = [ 
      { ontvNaam: 'nice' }, 
      { ontvNaam: 'it' }, 
      { ontvNaam: 'is' }, 
      { ontvNaam: 'working' } 
      ]; 
     }, 
     errorCallback: function(){ 
      console.log('failed'); 
     } 
     } 
    }).controller("RoutestopCtrl", function($scope, $rootScope, MovilizerExtender) { 
     MovilizerExtender.startUpMovilizer(); 
     $scope.routestops = $rootScope.routestops; 

     $rootScope.$watch('routestops', function(){ 
      $scope.routestops = $rootScope.routestops; 
     }); 
    }); 

Когда я непосредственно вызвать метод succesCallback и закомментируйте строку: movilizer. readGlobalVariable (...), он больше не пытается получить доступ к movilizerJS, а страница работает. Также обратите внимание, что файл Movilizer.js содержит метод readGlobalVariable, описанный в коде app.js. Любая помощь или идеи будут оценены.

+2

ли вы создать экземпляр movilizer прототипа Movilizer перед получением доступа к readGlobalVariable от этого? Сообщение об ошибке звучит так, как если бы экземпляр не присутствовал во время выполнения в контексте. Для отладки в браузере это должно присутствовать в Movilizer.js, если я не ошибаюсь. –

+2

. Недавно я смог устранить эту проблему, отредактировав порядок скриптов на моей HTML-странице, необходимо, чтобы cordova.js загрузился до моей ионической структуры в противном случае он не распознал бы movilizer.js, поскольку он еще не был создан. Я получил movilizerjs, работающий на моем обозревателе рабочего стола (хром, firefox и даже IE), хотя, к сожалению, он все еще не работает в клиенте движителя. С помощью отладочного клиента Swing все переменные выглядят нормально, поэтому я думаю, что это внутренняя ошибка на экране HTML5. Ошибки HTML5 не регистрируются в swing-отладочном клиенте, хотя я не уверен в этом –

+0

@VictorBeersma У меня была та же проблема, и ваш комментарий спас мой день. Пожалуйста, подумайте над тем, чтобы добавить это как ответ и принять его. Хорошего дня, сэр. –

ответ

0

Try для начальной загрузки приложения вместо использования ng-app:

window.onpageshow = ready; 
function ready() 
{ 
    var deviceready = new Event("deviceready"); 
    document.dispatchEvent(deviceready); 
    angular.bootstrap(document, ['starter'], {strictDi: true}); 
} 

Кроме того, используйте обещание ждать movilizer:

.factory('MovilizerExtender', function ($q, $rootScope) { 
    return { 
     startUpMovilizer: function(){ 
     var self = this; 
     var defer = $q.defer(); 

     rootScope.$watch(function(value) { 
      return movilizer && movilizer.readGlobalVariable; 
     }, function(ready) { 
      if(ready) { 
      movilizer.readGlobalVariable("testTable",self.successCallback,self.errorCallback); 
      } 
      defer.resolve(ready); 
     }); 
     return defer.promise; 
     }, 
     successCallback: function(result){ 
     $rootScope.routestops = [ 
      { ontvNaam: 'nice' }, 
      { ontvNaam: 'it' }, 
      { ontvNaam: 'is' }, 
      { ontvNaam: 'working' } 
     ]; 
     }, 
     errorCallback: function(){ 
     console.log('failed'); 
     } 
    } 
    }).controller("RoutestopCtrl", function($scope, $rootScope, MovilizerExtender) { 
    MovilizerExtender.startUpMovilizer().then(function(){ 
     $scope.routestops = $rootScope.routestops; 
    }); 
    $rootScope.$watch('routestops', function(){ 
     $scope.routestops = $rootScope.routestops; 
    }); 
    }); 
Смежные вопросы