-1

更新 2

我从 0.6.1 升级到 1.0.9 解决了这个问题。似乎认为在 0.8.7 和 0.8.8 版本中有两个修复程序需要完成这项工作。在 0.8.7 中,它确实调用了 reourceExtractor,但仍然会出现以下跟踪错误:

错误:$digest 已在Object.$get.Scope的 beginPhase ( http://ajax.googleapis.com/ajax/libs/angularjs/1.0.7/angular.js:8334:15 ) 处的 Error () 处进行。 $apply ( http://ajax.googleapis.com/ajax/libs/angularjs/1.0.7/angular.js:8136:11 ) 在 HTMLDivElement.ngEventDirectives.(匿名函数) ( http://ajax.googleapis.com /ajax/libs/angularjs/1.0.7/angular.js:12986:17)在 event.preventDefault (http://ajax.googleapis.com/ajax/libs/angularjs/1.0.7/angular.js:1992 : 10 ) Array.forEach (native) at forEach ( http://ajax.googleapis.com/ajax/libs/angularjs/1.0.7/angular.js:130:11 ) at eventHandler (http://ajax.googleapis.com/ajax/libs/angularjs/1.0.7/angular.js:1991:5)在 HTMLDivElement.forEach.bind.events.(匿名函数)(http://ajax.googleapis. com/ajax/libs/angularjs/1.0.7/angular.js:2067:15 ) 在 event.preventDefault ( http://ajax.googleapis.com/ajax/libs/angularjs/1.0.7/angular.js:1992 :10 )

然而 0.8.8 似乎已经清除了所有这些。我将继续四处寻找,看看是否还有其他奇怪之处。

我不知道我是怎么得到这样一个旧版本的restangular的。


更新:

所以通过javascript追踪

angular-resource.js::ResourceFactory

被称为成功变量是来自的匿名函数

restangular.js::fetchFunction

其中 responseExtractor 是我在我的应用程序中设置的功能。所以这一切看起来不错???在

angular-resource.js::ResourceFactory

进行 REST 调用并且数据变量包含正确的 REST 响应。它在同一功能中分崩离析:

if (data) {
    if (action.isArray) {
        value.length = 0;
        forEach(data, function(item) {
            value.push(new Resource(item));
        });
    } else {
        copy(data, value);
    }
}

发生错误@value.push(new Resource(item)); 其中 value 本质上是 JSON 休息响应。

我读到角度资源要求您定义其余资源和响应,并且定义的一部分是定义数组部分。我不知道这是否是根本原因 - 但我认为restangular会为我解决这个问题。还有更多的挖掘工作。任何帮助 - 仍然 - 赞赏。

谢谢


所以我正在同时学习 Angular 和 Django。我已经使用 Django 休息服务来构建一个服务来返回一些简单的 JSON。那部分工作正常,但我似乎无法将它与 /restangular 连接起来。REST 调用正在发生,并且 json 被返回 - 但 responseExtractor 似乎没有被调用。我一直在坐立不安,似乎无法将手指放在它上面。

先感谢您

添加调用堆栈:

TypeError: Object # has no method 'push' at U ( http://ajax.googleapis.com/ajax/libs/angularjs/1.0.7/angular.min.js:10:257 ) 在新资源 ( http:// /ajax.googleapis.com/ajax/libs/angularjs/1.0.7/angular-resource.js:350:9)在http://ajax.googleapis.com/ajax/libs/angularjs/1.0.7/angular- resource.js:407:32 at m ( http://ajax.googleapis.com/ajax/libs/angularjs/1.0.7/angular.min.js:6:494 ) at http://ajax.googleapis.com /ajax/libs/angularjs/1.0.7/angular-resource.js:406:19 在 h ( http://ajax.googleapis.com/ajax/libs/angularjs/1.0.7/angular.min.js:78 :33 ) 在http://ajax.googleapis.com/ajax/libs/angularjs/1.0.7/angular.min.js:78:266 在 Object.e.$eval ( http://ajax.googleapis.com/ajax/libs/angularjs/1.0.7/angular.min.js:88:347 ) 在 Object.e.$digest ( http:// ajax.googleapis.com/ajax/libs/angularjs/1.0.7/angular.min.js:86:198 ) 在 Object.e.$apply ( http://ajax.googleapis.com/ajax/libs/angularjs/ 1.0.7/angular.min.js:88:506 )

非最小堆栈

TypeError:对象#在新资源(http ://ajax .googleapis.com/ajax/libs/angularjs/1.0.7/angular-resource.js:350:9)在 angular.module.factory.Resource.(匿名函数)(http://ajax.googleapis.com/ajax /libs/angularjs/1.0.7/angular-resource.js:407:32)在 forEach (http://ajax.googleapis.com/ajax/libs/angularjs/1.0.7/angular.js:137:20)在 angular.module.factory.Resource.(匿名函数) ( http://ajax.googleapis.com/ajax/libs/angularjs/1.0.7/angular-resource.js:406:19 ) 在 deferred.promise.then .wrappedCallback (http://ajax.googleapis.com/ajax/libs/angularjs/1.0.7/angular.js:6846:59)在 ref.then (http://ajax.googleapis.com/ajax/libs/angularjs/1.0 .7/angular.js:6883:26 ) 在 Object.$get.Scope.$eval ( http://ajax.googleapis.com/ajax/libs/angularjs/1.0.7/angular.js:8057:28 )在 Object.$get.Scope.$digest ( http://ajax.googleapis.com/ajax/libs/angularjs/1.0.7/angular.js:7922:25 ) 在 Object.$get.Scope.$apply ( http://ajax.googleapis.com/ajax/libs/angularjs/1.0.7/angular.js:8143:24

查看代码,responseExtractor 方法存储在我在堆栈中看不到的变量“a”中。

JSON

{
    "count": 2
    , "next": null
    , "previous": null
    , "results": [{"file": "tb.png", "caption": "dfsdffs", "id": 1}
        , {"file": "tannin_tasting.jpg", "caption": "tannin tasting", "id": 2}
    ]
}

Javascript(编辑:修复了 sza 提到的剪切粘贴错误)

    angular.module('spaceJam', ['ui.bootstrap', 'restangular'])
        .config(function(RestangularProvider) {
             RestangularProvider.setResponseExtractor(function(response, operation) {
                 alert('here')
                 if (operation === "getList") {

                    var newResponse = response.results;
                    newResponse._resultmeta = {
                        "count": response.count,
                        "next": response.next,
                        "previous": response.previous
                    };
                    return newResponse;
                }

                return response;
             });
        });


var CarouselCtrl = function ($scope, Restangular) {

    Restangular.all('images/?format=json').getList().then(function(images) {
        alert(1)
        $scope.items = images;
    });


    $scope.myInterval = 3000;
    $scope.template = "/resources/angularViews/carousel.html"
    var slides = $scope.slides =  [
        {'type': 'image', 'name': '/resources/img/pinot_noir_glass.jpg'}
        , {'type': 'image', 'name': '/resources/img/toast1.jpg'}
        , {'type': 'image', 'name': '/resources/img/vinyard1.jpg'}
        , {'type': 'image', 'name': '/resources/img/tannin_tasting.jpg'}
    ]
}
4

2 回答 2

0

见原帖。升级解决了问题。

于 2013-08-20T14:02:56.330 回答
0

基本上你遇到了这个问题,因为 Restangular 在下面使用 $resource 。从 0.8.7 和 0.8.8 版本开始,我放弃了 $resource 并开始在下面使用 $http,因为 $resource 带来了很多问题。其中有一次是你所面对的。

如果您发现任何其他问题,请在 Github 上添加问题。

谢谢!

于 2013-08-20T23:17:06.203 回答