1

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

2 つの異なる Angular コントローラーを介してアクセスされる 2 つの別個の 4D テーブルを介して、4D-Mobile を通じて利用可能な 2 つの異なる 4D メソッドがあります。

.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 番目のメソッドは失敗するという奇妙な問題に気付きました。つまり、最初に呼び出すと機能しますが、ブラウザを更新するまでds.server_log.www4DMionicErrorLog()後続の呼び出しは失敗します。ds.servers.www4DMionicHomeOverview()

逆もまた真であり、ds.servers.www4DMionicHomeOverview()最初に呼び出すと機能しますが、後続の呼び出しはds.server_log.www4DMionicErrorLog()失敗します。


2番目の方法で得られるエラーは次のとおりです。

ionic.bundle.js:25642 TypeError: 未定義のプロパティ 'www4DMionicHomeOverview' を読み取れません

また

ionic.bundle.js:25642 TypeError: 未定義のプロパティ 'www4DMionicErrorLog' を読み取れません

2 つのメソッドのどちらを最初に呼び出すかによって異なります。


$wakanda.initこれが各コントローラーからの呼び出し方法に関連している可能性があるかどうか、興味があります。ドキュメントは、これを行うのが悪いとは言っていません。

Angular サービスをセットアップし、サービスで解決する方がよいでしょう$wakandaか?

4

2 に答える 2

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() を複数回呼び出すと失敗することがわかりました。

于 2016-04-24T15:38:13.880 に答える