Я разрабатываю мобильное приложение, созданное в Wakanda Digital App Factory 1.0.3, с использованием Ionic и AngularJS с базой данных 4D.

У меня есть два разных метода 4D, доступных через 4D-Mobile через две отдельные таблицы 4D, доступ к которым осуществляется через два разных контроллера Angular:

.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);
    });
})

Я замечаю странную проблему с вызовом этих четырехмерных методов, поскольку первый будет работать, а второй не сработает, независимо от того, какой из них я вызываю первым. То есть, если я сначала вызываю ds.server_log.www4DMionicErrorLog(), он работает, но затем последующие вызовы ds.servers.www4DMionicHomeOverview() терпят неудачу, пока я не обновлю браузер.

Верно и обратное, если я сначала вызываю ds.servers.www4DMionicHomeOverview(), тогда он работает, но последующие вызовы ds.server_log.www4DMionicErrorLog() терпят неудачу.


Ошибка, которую я получаю для второго метода:

ionic.bundle.js: 25642 TypeError: невозможно прочитать свойство www4DMionicHomeOverview из undefined

Или

ionic.bundle.js: 25642 TypeError: невозможно прочитать свойство www4DMionicErrorLog для неопределенного значения

В зависимости от того, какой из двух методов я вызываю первым.


Мне любопытно, может ли это быть связано с тем, как я вызываю $wakanda.init с каждого контроллера. В документации не говорится, что плохо сделай это.

Было бы лучше настроить службу Angular и разрешить $wakanda в службе?

1
Tim Penner 22 Апр 2016 в 02:42

2 ответа

Лучший ответ

Заменить

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

От

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

И сделайте то же самое для всех своих контроллеров.

В вашем случае я рекомендую вам использовать $ wakanda.init ()

2
Stéphane Garnier 22 Апр 2016 в 08:19

В моем проекте используется 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;
    },

Я обнаружил, что в контроллерах пользовательского интерфейса несколько вызовов $ wakanda.init () не работают.

1
David Ringsmuth 24 Апр 2016 в 15:38