0

Flash Builderを使用して、start-indexmax-results(YouTube APIの場合)という名前の2つのパラメーターを使用してデータサービスを作成する必要があります。Flash Builder / Flexデータサービスでは、パラメーター名に含めることができるのは文字、数字、およびアンダースコアのみです。子クラスを使用してサービスのスーパークラスでこれらをオーバーライドすることを目的として、一時的にstartIndexmaxResultsを使用しました。それは私が思ったほど単純ではないことがわかり、私はこれをさまざまな方法で試しました。スーパークラスのパラメーター名を上書きすると正常に動作しますが、自動生成されるため、必然的に上書きされます。これはスーパークラス_Super_TopRatedService.asです:

package services.topratedservice
{
**(imports here)**

[ExcludeClass]
internal class _Super_TopRatedService extends com.adobe.fiber.services.wrapper.HTTPServiceWrapper
{
    private static var serializer0:XMLSerializationFilter = new XMLSerializationFilter();

    // Constructor
    public function _Super_TopRatedService()
    {
        // initialize service control
        _serviceControl = new mx.rpc.http.HTTPMultiService();
         var operations:Array = new Array();
         var operation:mx.rpc.http.Operation;
         var argsArray:Array;

         operation = new mx.rpc.http.Operation(null, "getData");
         operation.url = "https://gdata.youtube.com/feeds/api/standardfeeds/top_rated";
         operation.method = "GET";
         argsArray = new Array("startIndex","maxResults");
         operation.argumentNames = argsArray;         
         operation.serializationFilter = serializer0;
         operation.properties = new Object();
         operation.properties["xPath"] = "/::entry";
         operation.resultElementType = valueObjects.Entry;
         operations.push(operation);

         _serviceControl.operationList = operations;  


         preInitializeService();
         model_internal::initialize();
    }        
    //init initialization routine here, child class to override
    protected function preInitializeService():void
    {

    }    
    /**
      * This method is a generated wrapper used to call the 'getData' operation. It returns an mx.rpc.AsyncToken whose 
      * result property will be populated with the result of the operation when the server response is received. 
      * To use this result from MXML code, define a CallResponder component and assign its token property to this method's return value. 
      * You can then bind to CallResponder.lastResult or listen for the CallResponder.result or fault events.
      *
      * @see mx.rpc.AsyncToken
      * @see mx.rpc.CallResponder 
      *
      * @return an mx.rpc.AsyncToken whose result property will be populated with the result of the operation when the server response is received.
      */
    public function getData(startIndex:int, maxresults:int) : mx.rpc.AsyncToken
    {
        var _internal_operation:mx.rpc.AbstractOperation = _serviceControl.getOperation("getData");
        var _internal_token:mx.rpc.AsyncToken = _internal_operation.send(startIndex,maxresults) ;
        return _internal_token;
    }         
}

パラメータ名は、argsArray = new Array( "startIndex"、 "maxResults");の行で確認できます。

これは子クラスTopRatedService.asです:

package services.topratedservice
{    
public class TopRatedService extends _Super_TopRatedService
{
    /**
     * Override super.init() to provide any initialization customization if needed.
     */
    protected override function preInitializeService():void
    {
        super.preInitializeService();
        // Initialization customization goes here
    }                   
}    
}

これをどこでどのようにオーバーライドする必要がありますか?

4

1 に答える 1

0

これは、 TopRatedService.asで行われるはずだった方法だと思います。

protected override function preInitializeService():void
    {
        super.preInitializeService();
        // Initialization customization goes here
        super._serviceControl.operations.getData.argumentNames= new Array("start-index","max-results")
    }
于 2012-05-19T16:55:44.530 に答える