2016-04-21 3 views
1

IonicとAngularJSを4Dバックエンドデータベースで使用して、Wakanda Digital App Factory 1.0.3で構築されたモバイルアプリケーションを開発しています。

.controller('homeCtrl', function($scope, $wakanda) { 
    $wakanda.init('servers').then(function(ds) { 
     ds.servers.www4DMionicHomeOverview().$promise.then(function(event) { 
      $json = event.result; 
      $scope.overview = $json.servers; 
      $scope.healthCheck = $json.healthCheck; 
     }, function(err) { 
      debugger 
      console.log(err); 
     }); 
    }, function(err) { 
     debugger 
     console.log(err); 
    }); 
}) 

.controller('errorLogCtrl', function($scope, $wakanda) { 
    $wakanda.init('server_log').then(function(ds) { 
     ds.server_log.www4DMionicErrorLog().$promise.then(function(event) { 
      $json = event.result; 
      $scope.errors = $json; 
     }, function(e) { 
      debugger 
      console.log(e); 
     }); 
    }, function(e) { 
     debugger 
     console.log(e); 
    }); 
}) 

私が最初にこれらの4Dメソッドを呼び出す奇妙な問題に気付いています:

私は2つの異なる角度のコントローラを介してアクセスされている2つの別々の4Dのテーブルを介した4D-モバイルを通じて利用可能な2つの異なった4Dメソッドは持っています1つは動作しますが、最初に呼び出すものに関係なく、2番目のものは失敗します。つまり、最初にds.server_log.www4DMionicErrorLog()を呼び出すと、その後はブラウザが更新されるまでds.servers.www4DMionicHomeOverview()の呼び出しが失敗します。

逆のことは、ds.servers.www4DMionicHomeOverview()を最初に呼び出すと、最初に動作しますが、それ以降の呼び出しはds.server_log.www4DMionicErrorLog()に失敗します。


私は第二の方法のために得るエラーは次のとおりです。私は最初の呼び出し二つの方法のどちらによって

ionic.bundle.js:25642 TypeError: Cannot read property 'www4DMionicHomeOverview' of undefined

または

ionic.bundle.js:25642 TypeError: Cannot read property 'www4DMionicErrorLog' of undefined


これは私が各コントローラから$wakanda.initを呼び出していますどのように関連している可能性があれば、私は好奇心旺盛です。 documentationは、これを行うことが悪いとは言いません。

Angularサービスを設定してサービス内で$wakandaを解決する方がよいでしょうか?

+0

これらのコメントは、「アプリケーションで1回実行するためのInitメソッド(データベースの説明であるWAFカタログを取得します)」および「initパーツが完了した後、これを介してデータストアにアクセスできますシングルトン法 "$wakandaResult.getDatastore = function() {。だから、あなたは一度しか起動できないと仮定すると、ドキュメンテーションは、同じアプリケーションの例ではなく、2つの例を表示する必要があります。 – garethb

+0

@Tim:わかりませんが、あなたのui-routerを使用してそれぞれの状態で$ wakanda.init( 'xxx')を入力し、コントローラに結果などを注入します。PS:結果を知りましょう。PS:デバッガの使用を忘れないでください。 –

答えて

2

$wakanda.init().then(function(ds) {... 

によって

$wakanda.init('servers').then(function(ds) {... 

を交換し、あなたのコントローラ内のすべてのために同じことを行います。あなたのケースでは

、私は(あなたが$ wakanda.initを使用することをお勧めします)

+0

ありがとう!これは動作しているようで、複数の異なるコントローラから '$ wakanda.init'を呼び出すことはOKです。しかし、 '$ wkanda.init'をLoginControllerから一度呼び出すと、' var ds = $ wakanda.getDataStore(); 'を他のコントローラから利用する方が良いでしょうか?もしそうならば、 'var ds = $ wakanda.getDataStore();'は約束と共にどのように使用できますか? –

1

私のプロジェクトは、私が

への呼び出しの数を減らし、より効率的にするための試みでは1.3.7 AngularJS

を使用しています

$wakanda.init().then(function oninit(ds) { 
          $rootScope.ds = $wakanda.$ds; 

今後の呼び出しでは、$ rootScope.dsが使用されます。

ただし、私のサービスごとに、$ wakanda.init()の呼び出しがあります。

 userCredentials: function(login,password,validate) { 
     var deferred = $q.defer(); 

     $wakanda.init().then(function oninit(ds) { 
      ds.User.userCredentials(login,password,validate, { 
       onSuccess: function(data) { 
        deferred.resolve(data); 
       }, 
       onError: function(err) { 
        deferred.reject(err.message); 
       } 
      }); 
     }); //$wakanda.init() 

     return deferred.promise; 
    }, 

UIコントローラ内で$ wakanda.init()を複数回呼び出すと失敗することがありました。

関連する問題