-1

更新 2

問題を修正した 0.6.1 から 1.0.9 にアップグレードしました。バージョン 0.8.7 と 0.8.8 には、この作業を行うために必要な 2 つの修正があったようです。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 ) at 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 (ネイティブ) で 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)); ここで、値は基本的に 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 ) at new Resource ( 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 at 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: Object # has no method 'push' at copy ( http://ajax.googleapis.com/ajax/libs/angularjs/1.0.7/angular.js:593:21 ) at new Resource ( 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

基本的に、Restangular が $resource を使用していたため、その問題が発生していました。バージョン 0.8.7 と 0.8.8 以降、$resource は多くの問題を引き起こしていたため、$resource を捨てて、以下の $http を使い始めました。それらの 1 つは、あなたが直面していたものでした。

他の問題を見つけた場合は、Github で問題を追加してください。

ありがとう!

于 2013-08-20T23:17:06.203 に答える