1

我正在使用带有 4D 后端数据库的 Ionic 和 AngularJS 开发在 Wakanda Digital App Factory 1.0.3 中构建的移动应用程序。

我有两种不同的 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);
    });
})

我注意到调用这些 4D 方法的一个奇怪问题,即第一个方法可以工作,但第二个方法会失败,无论我先调用哪个方法。也就是说,如果我ds.server_log.www4DMionicErrorLog()先调用它会起作用,但随后的调用会ds.servers.www4DMionicHomeOverview()失败,直到我刷新浏览器。

反之亦然,如果我ds.servers.www4DMionicHomeOverview()先打电话,那么它会起作用,但随后的电话会ds.server_log.www4DMionicErrorLog()失败。


我得到的第二种方法的错误是:

ionic.bundle.js:25642 TypeError:无法读取未定义的属性“www4DMionicHomeOverview”

或者

ionic.bundle.js:25642 TypeError:无法读取未定义的属性“www4DMionicErrorLog”

取决于我首先调用的两种方法中的哪一种。


我很好奇这是否与我$wakanda.init从每个控制器调用的方式有关。文档并没有说这样做不好。

$wakanda设置一个 Angular 服务并在服务中解析会更好吗?

4

2 回答 2

2

代替

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

经过

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

并对控制器中的所有内容执行相同的操作。

在您的情况下,我建议您使用 $wakanda.init()

于 2016-04-22T08:19:34.227 回答
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 回答