0

同じインスタンス化されたオブジェクトを使用して、複数のエンドポイントに対してリソース呼び出しを行おうとしています。プロトタイプリソースメソッドを使用するメソッドはエンドポイントを変更しますが、@idは抽出に失敗します。idは確かにオブジェクトのプロパティです。通常のmodel。$getを実行すると、機能します。助けていただければ幸いです。コード内のコメントが説明に役立つことを願っています。

admin.controller('ModelController', ['$scope', 'Model', function($scope, Model) {

    // first call to instantiate the models with the default resource url
    Model.query(
        {},
        function(resp) {
            $scope.models = resp.results;
        }
    );

    // this event is emited from a directive
    // data is a object from the models collection
    $scope.$on('modelClick', function(event, data) {

        // without this, event fires twice, i am not sure why.
        event.stopPropagation();


        // creates model with resource prototype
        // the hope is then to be able to do $get or $save on $scope.model
        $scope.model = new Model(data);


        // call below will work normal, pulls the id out of the object
        // and sends it with the request to the default url
        $scope.model.$get();


        // this method changes the resource url to the correct one
        // but id=undefined is put on the query string
        // i have debugged the resource api and when this gets called
        // the object is being sent to the $parse method and the id is available
        $scope.model.getInfo();


        // updates the view
        $scope.$apply('model');
    });


}]);


admin.factory( 'Model', ['$resource', function($resource) {

    // default resource url
    var Model = $resource('/:url', {id: '@id', url: 'initial/path'}, {});


    // method to call a different endpoint, but with same id from instantiated object
    Model.prototype.getInfo = function(params, success, error) {
        var response = this.$get(
            {url: 'info/path'}
        );
        return response;
    };

    return Model;

}]);

$ scope.model.getInfo()が/ info / path?id = undefinedを呼び出す理由についてのヘルプは、大歓迎です。ありがとうございました。

4

1 に答える 1

1

これがうまくいくかどうかはわかりませんが、これを試してみてください、

Model.prototype.getInfo = function(params, success, error) {
       var id = this.id; // if id is not a direct member of 'this'. Please inspect the 'this' for any getter method to get the member variables.
        var response = this.$get(
            {url: 'info/path', 'id':id}
        );
        return response;
    };

このコードをコメントセクションに入れるのは本当に難しいかもしれないので、答えとして追加しました。

于 2013-03-17T19:53:57.397 に答える