forgot to explain that the whole thing works with the 
qcl.databinding.simple.MDataManager mixin, which does all the i/o stuff 
and dispatches the "dataReceived" event when the data has arrived. this 
part works flawlessly, the data is just not rendered in the table rows....

bibliograph schrieb:
> Hello,
>
> it took me a while to figure out how to write an implementation of the 
> qx.ui.table.model.Remote class.  I will provide this class as a 
> much-needed example. Now everything works with the backend - the data is 
> prefetched and everything - sweet! But .... nothing shows up in my 
> table, event though the data is passed to this._onRowDataLoaded() as 
> required. My data looks like this:
>
> [ [ "foo","bar","baz"],["Foo!","BAR!","zoo"], ...]
>
> What am I doing wrong?
>
> Thanks, Christian
>
> /**
>  * An implementation of the abstract class qx.ui.table.model.Remote that 
> uses
>  * qcl.databinding.simple package
>  */
> qx.Class.define("qcl.databinding.simple.RemoteTableModel",
> {
>   extend : qx.ui.table.model.Remote,
>
>   construct : function(serviceName)
>   {
>     this.base(arguments);
>     this.setServiceName(serviceName||"");
>     this.setDataBinding(true);
>     
>     // setup event listener for handling data received by MDataManager mixin
>     this.addEventListener("dataReceived",function(e){
>       result = e.getData();
>       if ( result== null )
>       {
>         this.setRowCount(null);
>         this.setRowData([]);
>       }
>       else if ( "rowCount" in result )
>       {
>         this.setRowCount(result.rowCount);
>       }
>       else if ( "rowData" in result )
>       {
>         this.setRowData(result.rowData);
>       }
>     });
>   },
>
>   properties :
>   {
>
>     /**
>      * the data passed to the server methods which determine row count 
> and row data
>      * it is up to the server method to interpret this data - it can be 
> a full sql
>      * query string (not recommended) or just bits of data (in an array 
> or object)
>      * to construct the query.
>      */
>     queryData :
>     {
>       nullable : true,
>       init : null
>     },
>     
>     /**
>      * name of the jsonrpc service method that determines row count
>      * defaults to "getRowCount"
>      */
>     serviceMethodGetRowCount :
>     {
>       check : "String",
>       nullable : false,
>       init : "getRowCount"
>     },
>     
>    /**
>     * name of the jsonrpc service method that retrieves the row data
>     * defaults to "getRowData"
>     */
>     serviceMethodGetRowData :
>     {
>       check : "String",
>       nullable : false,
>       init : "getRowData"
>     }
>   },
>
>   members :
>   {
>
>     /**
>      * overridden
>      * in this version of a remote table model, simply an alias for 
> this.reloadData()
>      */
>     updateClient : function()
>     {
>       this.reloadData();
>     },
>     
>     /**
>      * gets number of rows that the query will produce.
>      * The value of the queryData property is passed to the
>      * service class on the server which needs to return the following
>      * response: { result : { rowCount : 1234 }, ... }
>      *
>      * @type member
>      * @abstract
>      * @return {void}
>      */
>     _loadRowCount : function()
>     {
>       if ( ! this.getServiceName() ) return 0; // do not do any updates 
> until service name is known
>       this._updateClient(
>         this.getServiceName() + "." + this.getServiceMethodGetRowCount(),
>         this.getQueryData()  
>       );
>       this._rowCount = 0; // update is in progress
>     },
>
>     /**
>      * receives the row count value returned by the server and passes it on
>      * to the _onRowCountLoaded function as required by 
> qx.ui.table.model.Remote
>      */
>     setRowCount : function (rowCount)
>     {
>       this._onRowCountLoaded(rowCount);
>     },
>
>     /**
>      * gets the column names as an array
>      * @return {Array}
>      */
>     getColumnIds : function ()
>     {
>       return this._columnIdArr;
>     },
>     
>     /**
>      * Loads row data from the server. The service class on the server
>      * must have the following signature:
>      *   Mixed    queryData data from which to construct the query
>      *   Integer  firstRow
>      *   Integer  lastRow
>      * The server jsonrpc response must look like so:
>      * { result : {  rowData : [ [ ... ],[...],...] }, ..}
>      *
>      * @type member
>      * @abstract
>      * @param firstRow {Integer} The index of the first row to load.
>      * @param lastRow {Integer} The index of the last row to load.
>      * @return {void}
>      */
>     _loadRowData : function(firstRow, lastRow)
>     {
>       if ( ! this.getServiceName() ) return []; // do not do any updates 
> until service name is known
>       this._updateClient(
>         this.getServiceName() + "." + this.getServiceMethodGetRowData(),
>         this.getQueryData(),firstRow,lastRow  
>       );
>     },
>
>     /**
>      * receives the row data returned by the server and passes it on
>      * to the _onRowDataLoaded function as required by 
> qx.ui.table.model.Remote
>      */
>     setRowData : function (rowDataArr)
>     {
>       this._onRowDataLoaded(rowDataArr);
>     }
>
>   }
> });
>
>
> -------------------------------------------------------------------------
> This SF.net email is sponsored by: Microsoft
> Defy all challenges. Microsoft(R) Visual Studio 2005.
> http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
> _______________________________________________
> qooxdoo-devel mailing list
> qooxdoo-devel@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/qooxdoo-devel
>   


-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2005.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
qooxdoo-devel mailing list
qooxdoo-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/qooxdoo-devel

Reply via email to