restangular / django:“TypeError:Object#<resource>没有方法'push'”(RestangularProvider.setResponseExtractor没有被调用?)</resource>

时间:2013-08-13 20:06:01

标签: python django angularjs restangular

更新2

我从0.6.1升级到1.0.9修复了这个问题。似乎认为版本0.8.7和0.8.8中有两个修复工具需要它们才能完成。在0.8.7中,它确实调用了reourceExtractor,但仍然出现错误:此跟踪:

  

错误:$ digest已在进行中       在错误()       在beginPhase(http://ajax.googleapis.com/ajax/libs/angularjs/1.0.7/angular.js:8334:15)       at Object。$ get.Scope。$ 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)       at Array.forEach(native)       at forEach(http://ajax.googleapis.com/ajax/libs/angularjs/1.0.7/angular.js:130:11)       在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 rest响应。

我读到角度资源需要您定义其余资源和响应,部分定义是定义数组部分。我不知道这是否是根本原因 - 但我认为restangular为我做了这件事。还有更多要挖掘的事情。任何帮助都是 - 仍然感激。

THX


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

提前谢谢

添加调用堆栈:

  

TypeError:对象#没有方法'推送'       在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       在m(http://ajax.googleapis.com/ajax/libs/angularjs/1.0.7/angular.min.js:6:494)       在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       at 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.js:593:21)       在新资源(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)       at 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)       at Object。$ get.Scope。$ eval(http://ajax.googleapis.com/ajax/libs/angularjs/1.0.7/angular.js:8057:28)       at Object。$ get.Scope。$ digest(http://ajax.googleapis.com/ajax/libs/angularjs/1.0.7/angular.js:7922:25)       at 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'}
    ]
}

2 个答案:

答案 0 :(得分:0)

查看原帖。升级解决了这个问题。

答案 1 :(得分:0)

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

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

谢谢!