1. #1
    Sencha User
    Join Date
    Apr 2012
    Location
    Austin, Texas
    Posts
    2
    Vote Rating
    0
    brian.moeskau is an unknown quantity at this point

      0  

    Default Any other .NET devs using yui-ext?

    Any other .NET devs using yui-ext?


    I'm interested in hearing from other .NET developers and gathering some ASP.NET-specific best practices for developing with yui-ext (and OO js / ajax in general).

    .NET offers some unique challenges in this arena that I'm sure others may have experienced:

    - Just getting the border layout to render inside a .NET page was a pain, although we figured that out (http://www.yui-ext.com/forum/viewtopic.php?t=323).

    - .NET is generally constrained to one form per page. While there are various potential workarounds, it definitely complicates things that should otherwise be simple (like rendering a sub-form into a yui-ext dialog that can be handled separately from the form on the main page).

    - Everything in .NET, by default, is based on auto-postback handling. Atlas (now Ajax.NET) fudges its way through this with some nasty scripting and preserves postbacks, which actually makes some things a lot more convenient since you can still rely on the code-behind object/event model. For .NET developers, this is usually pretty helpful. The drawback is that Ajax.NET UpdatePanels tend to mangle any other scripts in their way, making it hard to use other things like yui-ext.

    - The flip-side is that while doing client-side stuff with yui-ext is much preferred in many, many cases, it makes certain things a lot harder than what .NET folks are generally used to (like binding data to a grid, which in .NET, essentially requires two lines of server code and you're done). .NET tends to do it's model-oriented stuff on the server in general, so changing to a client-side model of binding/rendering is somewhat tedious/difficult compared to the typical .NET way.

    Anyway, I'm sure there's more than that -- those are just the things on my mind that I've been dealing with lately. I sure would like to hear from any other .NET'ers that may be around, and swap strategies and best practices for doing this stuff.

    (And one more thing: "Easy, just switch to PHP/Ruby/Python/Cobol/whatever" is not a valid answer

  2. #2
    Ext User
    Join Date
    Mar 2007
    Posts
    161
    Vote Rating
    0
    Choleriker is on a distinguished road

      0  

    Default Im using both hand in hand

    Im using both hand in hand


    Hello,

    im using Yui-Ext + .NET 2.0 hand in hand and it works fine.

    First thing is: ASP.NET isnt really based only at one form!! For sure, mostly there has to be a form that has runat=server at it, only do this:

    <form></form>

    The rest of your layout stuff simply render outside of that form. If you do so, you can have many forms you want. Try to ensure dont get nested forms, any browsers dont want it.

    Im using yui-ext on client side, and for the communication with the server im using ttp://www.ajaxpro.info. Works fine until now. Im at this time on extending that lib. With that, you dont need Postbacks directly. But ASP.NET 2.0 has built in Ajax methods (refer Documentation for System.Web.UI.Page and so on). That methods helps you at very simple way to override Postbacks on page!

    I have thought about writing custom asp.net controls, that exposes Yui + Yui-Ext, but there is no need for it, because the most part with that ajax stuff is client-side, not server side. To get your project, stop thinking in ASP.NET, think in YUI :o)

    I have tried prototype, Ajax.NET (formerly Atlas), dojo, backbase and the other stuff. No framework is such fast and mostly buggy free as yui + jacks yui-ext. GREAT WORK JACK!!

    After i have extend the AjaxPro and joined with a DataModel for a DataSet in Yui-Ext, i will post the code (i hope i will get finished it soon).

    Does it helps you? If not let me know. Maybe we both can work hand in hand with stuff. Interested?

    Regards, Michael Baarz
    http://www.tecbehind.de

  3. #3
    Ext JS Premium Member
    Join Date
    Mar 2007
    Location
    NL
    Posts
    608
    Vote Rating
    1
    mdissel is on a distinguished road

      0  

    Default Re: Im using both hand in hand

    Re: Im using both hand in hand


    Quote Originally Posted by Choleriker
    im using Yui-Ext + .NET 2.0 hand in hand and it works fine.
    First thing is: ASP.NET isnt really based only at one form!! For sure, mostly there has to be a form that has runat=server at it, only do this:
    <form></form>
    Can you share some samples?

    Quote Originally Posted by Choleriker
    Im using yui-ext on client side, and for the communication with the server im using ttp://www.ajaxpro.info. Works fine until now. Im at this time on extending that lib. With that, you dont need Postbacks directly. But ASP.NET 2.0 has built in Ajax methods (refer Documentation for System.Web.UI.Page and so on). That methods helps you at very simple way to override Postbacks on page!
    Good idea!!

    Quote Originally Posted by Choleriker
    I have tried prototype, Ajax.NET (formerly Atlas), dojo, backbase and the other stuff. No framework is such fast and mostly buggy free as yui + jacks yui-ext. GREAT WORK JACK!!
    I totally agree!! My road was the same (and using all kind of rich (commercial) asp.net controls)

    Quote Originally Posted by Choleriker
    After i have extend the AjaxPro and joined with a DataModel for a DataSet in Yui-Ext, i will post the code (i hope i will get finished it soon).
    In my applications i'm only working with (collection of) objects (using some DAL layer (like DataObjects.NET, LLBLGEN pro, nHibernate, etc.) , objects can be transfered by JSON to the client.. Hopefully the JSON of ajaxpro is compatible with YUI(-ext). Anyone tested this (especially the datetime properties)?

    Maybe Jack can create a separate forum for .NET integration..

    We could create a masterpage containing the yui-ext javascript, css, etc.. The layout of the masterpage is created by the yui BorderLayout.. The divs for the ContentPanel have a asp:ContentPlaceHolder.. the pages inside the ContentPlaceHolder use ajaxpro handlers to call serverside methods from javascript to handle communication, thus avoiding any Postback.. The result will be handled by yui-ext to update one or more contentpanels..

    Feedback is welcome!


    Thanks

    Marco

  4. #4
    Sencha User
    Join Date
    Mar 2007
    Posts
    7,854
    Vote Rating
    4
    tryanDLS is on a distinguished road

      0  

    Default


    I've used the AjaxPro JSON stuff and it works great - if all you want to do is pass JSON back to the client, you don't need the entire AjaxPro lib, just the AjaxPro.JSON.dll to do the serialization.

    As for the power of .NET databinding, I would say that you can still do that. Just bind to a control that's initially hidden, then yui-ext can pull the data out of it and do what ever it wants.

  5. #5
    Ext User
    Join Date
    Mar 2007
    Posts
    23
    Vote Rating
    0
    qiuyl is on a distinguished road

      0  

    Default


    .NET is excellent in server-side work and YUI-Ext is excellent in client side work. .NET + YUI-EXT rocks! I use .NET for data bind (XML, Web Service, JSON) and use YUI-ext in client code to pull data from server.

    I cannot believe that YUI-Ext is made by one single developer, rather than a team!

  6. #6
    Ext JS Premium Member
    Join Date
    Mar 2007
    Location
    NL
    Posts
    608
    Vote Rating
    1
    mdissel is on a distinguished road

      0  

    Default


    Quote Originally Posted by qiuyl
    .NET is excellent in server-side work and YUI-Ext is excellent in client side work. .NET + YUI-EXT rocks! I use .NET for data bind (XML, Web Service, JSON) and use YUI-ext in client code to pull data from server.
    So from your javascript you're calling .NET webservices that return JSON or XML or both? Why Xml?..

    I'm wondering what will be better (performance / maintenance / readibility)?
    - a webservice having multiple functions to support a single page / functionality and a base page that is initially loaded and cotains the UI (and yui-ext)
    - a base page with UI (and yui-ext) and AjaxPro attributes on methods so that those methods can be executed from the client..


    Thanks

    Marco

  7. #7
    Sencha User
    Join Date
    Apr 2012
    Location
    Austin, Texas
    Posts
    2
    Vote Rating
    0
    brian.moeskau is an unknown quantity at this point

      0  

    Default


    So I think what I'm hearing so far is about what I was expecting -- no one's really using the .NET postback model in terms of keeping server controls hooked up to the code-behind to call server methods (except maybe via AjaxPro). Everything is done through async calls of some sort or other, and .NET is really just used as the middle tier/back end.

    I guess I'm struggling with trying to make other developers productive who have .NET skills but not necessarily JS skills. I was hoping that there was a good strategy for using yui-ext for the UI/widgets, but still preserving the model that the .NET developers are used to. It's starting to seem like this is a losing battle and that you really have to give up on postbacks, viewstate, etc. altogether in order to make use of yui-ext-type stuff. I guess that's what Atlas is for, except that compared to using yui-ext, it's like a non-stop kick in the nuts.

    Like I said, for my own stuff, I'm perfectly happy with yui-ext. I'm just trying to figure out a strategy for using it while still allowing others to code like "traditional" .NET developers. I don't think it's going to happen.

  8. #8
    Sencha User
    Join Date
    Mar 2007
    Posts
    7,854
    Vote Rating
    4
    tryanDLS is on a distinguished road

      0  

    Default


    I think you identified part of the problem. 'what the .NET devs are used to' The problem is that many .NET devs can only think in postback fashion - all they know how to do is send a form and what for the submit event. That said, the backend skills are still useful - they can perhaps just expose methods to send/receive chunks so data that the client requests (e.g. webservices, etc).

    Also, I think it's still possible for a .NET dev to build a page with controls that do databinding, etc. which you then take and massage with yui-ext. This power is tremendously useful as you said. You can still fire async requests to other targets if you don't want to post the form back, and you can disable the form submit until such time as you choose. This should still preserve viewstate. Depending on your needs, you may find that it makes sense for a dev to databind to some control without caring about how it looks (e.g a list). You can tweak the display how you want (e.g. in a grid) and send back updates via AJAX. They just move their onpostback logic to a different location that you invoke.

  9. #9
    Ext User
    Join Date
    Mar 2007
    Posts
    161
    Vote Rating
    0
    Choleriker is on a distinguished road

      0  

    Default Here my current developments states

    Here my current developments states


    Hey,

    Not ALL Asp.net Developers never have developed other languages and can only think in Asp.net, any of them only have get known the posibillities of it and started to love that way!

    Im using server-controls, but not they Postbacks for it. In this way i can use Theming and that stuff, which is a great extension. For getting HTML-Controls appearing, im using a UpdateManager which loads a aspx page with a parameter wich specifies the content, which has to load. That page dynamically loads a control in a directory which is named like the design, which is stored playin text in the user-profile. Heres the ASP.net code of that loader:

    Code:
    <Page>
    <script>
        protected void Page_Load(object sender, EventArgs e)
        {
            this.PlaceHolder1.Controls.Add(LoadControl(Profile.Design + "/" + Request["c"] + ".ascx"));
        }
    </script>
    <asp></asp>
    for that above: the <asp></asp> means only an asp placeholder with the id Placeholder1 running at server!

    As you can see, the parameter 'c' takes the name of the content.

    The next (a little more complex) thing was to extend the AjaxPro framework. First i have wrote a custom YUI wrapper classes that extends the dataset, datatable etc. on client-side. If you get closer with that code, you will find a class TrimQuery. That great piece of code give you the possibilities to trigger SQL-Statements over Javascript objects. With that you dont need to have complex loops over the tables of the dataset. You can find that lib at http://trimpath.com/project/wiki/TrimQuery I like it

    Here are my code:

    Code:
    /**
    *   @author Michael Baarz, mb@tecbehind.de
    *   @copyright www.tecbehind.de
    **/
    
    function isUndefined(o) { return typeof o=='undefined' || o==null; }
    function isNull(o) { return (o === null); }
    function isFunction(o) { return typeof o=='function'; }
    function isArray(o) { return typeof o=='array'; }
    function isString(o) { return typeof o=='string'; }
    function isObject(o) { return typeof o=='object'; }
    function isFunction(e) { return typeof o=='function'; }
    function isBool(e) { return typeof o=='boolean'; }
    
    if(isUndefined(YAHOO.tecbehind)) YAHOO.namespace('tecbehind');
    
    /*****************************************************************************************************************************************************************
    *   Implementation einer Spalten-Definition in einem DataSet
    *
    *   @class YAHOO.tecbehind.DataColumn
    *   @extends YAHOO.ext.util.Observable
    *   @constructor
    *****************************************************************************************************************************************************************/
    YAHOO.tecbehind.DataColumn = function(cfg) {
       this.id = cfg.id;
       this.type = cfg.type;
    };
    YAHOO.extendX(YAHOO.tecbehind.DataColumn, YAHOO.ext.util.Observable, {
    });
    /*****************************************************************************************************************************************************************
    *   Implementation einer Zeile in einem DataSet
    *
    *   @class YAHOO.tecbehind.DataRow
    *   @extends YAHOO.ext.util.Observable
    *   @constructor
    *****************************************************************************************************************************************************************/
    YAHOO.tecbehind.DataRow = function(cells) {
       for(var i in cells) this[i] = cells[i];
    };
    YAHOO.extendX(YAHOO.tecbehind.DataRow, YAHOO.ext.util.Observable, {
    });
    /*****************************************************************************************************************************************************************
    *   Implementation einer Tabelle in einem DataSet.
    *
    *   @class YAHOO.tecbehind.DataTable
    *   @extends YAHOO.ext.util.Observable
    *   @constructor
    *****************************************************************************************************************************************************************/
    YAHOO.tecbehind.DataTable = function(cols, rows, tableName) {
       this.tableName = tableName;   
       this.columns = new YAHOO.ext.util.MixedCollection();
       this.rows = new Array();
       
       this.ds = null;  // Das DataSet, welches dieser Table zugeordnet ist
       
       // Spalten aufnehmen + Parsen
       var _l = cols.length;
       for(var i=0; i<_l; i++) this.addColumn(cols[i]);
       
       // Zeilen aufnehmen und Parsen
       var _l = rows.length;
       for(var i=0; i<_l; i++) this.addRow(rows[i]);
    };
    YAHOO.extendX(YAHOO.tecbehind.DataTable, YAHOO.ext.util.Observable, {
        /**
        *   Gibt das SQL Model für diese Tabelle zurück, welche mit TrimQuery verwendet werden kann.
        **/
        getSqlModel: function() {
            var _def = {};
            this.columns.eachKey(function(key, item) {
                _def[key] = {
                    type: item.type
                 };
            });
            return _def;
        },
        addColumn: function(col) {
            this.columns.add(col.id, col);
        },
        addRow: function(row) {
            this.rows.push(row);
        },
        assignDataSet: function(ds) {
            this.ds = ds;
        }
    });
    /*****************************************************************************************************************************************************************
    *   Implementation des DataSets
    *
    *   @class YAHOO.tecbehind.DataSet
    *   @extends YAHOO.ext.util.Observable
    *   @constructor
    *****************************************************************************************************************************************************************/
    YAHOO.tecbehind.DataSet = function(tables) {
        this.tables = {};
        var _l;
        if(!isUndefined(tables)) {
            _l = tables.length;
            for(var i=0; i<_l; i++) this.addTable(tables[i]);
        }
    };
    YAHOO.extendX(YAHOO.tecbehind.DataSet, YAHOO.ext.util.Observable, {
        /**
        *   Ermöglicht das Client-Seitige Ausführen von SQL Statements
        **/
        select: function(strSelect) {
            debug('SELECT-Statement auf DataSet ausführen: '+strSelect);
            // Query-Language mit Definitionen vorcompilieren
            var queryLang = TrimPath.makeQueryLang(this.getSqlModel());
            // Select-Statement ausführen
            var statement = queryLang.parseSQL(strSelect);
            // Query ausführen
            var results = statement.filter(this._getQueryableData());
            debug('Result-count: '+results.length);
            return results;        
        },
        /**
        *   Bereitet die Daten für Client-Seitige Selects auf
        **/
        _getQueryableData: function() { 
            var sh = {};
            for(var i in this.tables) {
                sh[this.tables[i].tableName]=this.tables[i].rows;
            }
            return sh;
        },
        /**
        *   Erstellt das SQL-Model, welches mit TrimPath zum verwenden von SQL-Statements benötigt wird.
        **/
        getSqlModel: function() {
            var _def = {};
            for(var i in this.tables) _def[this.tables[i].tableName] = this.tables[i].getSqlModel();
            return _def;
        },
        
        addTable: function(tab) {
            // In Table-Collection aufnehmen
            this.tables[tab.tableName] = tab;
            /** DataSet-Referenz erstellen **/
            tab.assignDataSet(this);
        }
    });
    After that i have to change the JSON Converters at the AjaxPro Frameworks. You can add new classes and define which JSON-Converter has to use. I will never use other ways to handle dataset, so i have only changed the source by itself. Here is my code:

    JSON\Converts\DataSetConverter.js
    Code:
    using System;
    using System.Text;
    using System.Data;
    
    namespace AjaxPro
    {
    	/// <summary>
    	/// Provides methods to serialize and deserialize a DataSet object.
    	/// </summary>
    	public class DataSetConverter : IJavaScriptConverter
    	{
    		private string clientType = "YAHOO.tecbehind.DataSet";
    
    		public DataSetConverter() : base()
    		{
    			m_AllowInheritance = true;
    
    			m_serializableTypes = new Type[] { typeof(DataSet) };
    			m_deserializableTypes = new Type[] { typeof(DataSet) };
    		}
    
    		public override string GetClientScript()
    		{
                return ""; 
    		}
    
    		public override object Deserialize(IJavaScriptObject o, Type t)
    		{
    			JavaScriptObject ht = o as JavaScriptObject;
    
    			if(ht == null)
    				throw new NotSupportedException();
    
    			if(!ht.Contains("Tables") || !(ht["Tables"] is JavaScriptArray))
    				throw new NotSupportedException();
    
    			JavaScriptArray tables = (JavaScriptArray)ht["Tables"];
    			
    			DataSet ds = new DataSet();
    			DataTable dt = null;
    
    			foreach(IJavaScriptObject table in tables)
    			{
    				dt = (DataTable)JavaScriptDeserializer.Deserialize(table, typeof(DataTable));
    
    				if(dt != null)
    					ds.Tables.Add(dt);
    			}
    
    			return ds;			
    		}
    
    		public override string Serialize(object o)
    		{
    			StringBuilder sb = new StringBuilder();
    			Serialize(o, sb);
    			return sb.ToString();
    		}
    
    		public override void Serialize(object o, StringBuilder sb)
    		{
    			DataSet ds = o as DataSet;
    
    			if(ds == null)
    				throw new NotSupportedException();
    			
    			bool b = true, b1 = true;
    
    			sb.Append("new ");
    			sb.Append(clientType);
    			sb.Append("([");
    				
    			foreach(DataTable dt in ds.Tables)
    			{
    				if(b){ b = false; }
    				else{ sb.Append(","); }
    
    				JavaScriptSerializer.Serialize(dt, sb);
                }
                sb.Append("])");
    		}
    	}
    }
    JSON\Converts\DataTableConverter.js
    Code:
    using System;
    using System.Text;
    using System.Data;
    
    namespace AjaxPro
    {
    	/// <summary>
    	/// Provides methods to serialize and deserialize a DataTable object.
    	/// </summary>
    	public class DataTableConverter : IJavaScriptConverter
    	{
    		private string clientType = "YAHOO.tecbehind.DataTable";
    
    		public DataTableConverter() : base()
    		{
    			m_AllowInheritance = true;
    
    			m_serializableTypes = new Type[] { typeof(DataTable) };
    			m_deserializableTypes = new Type[] { typeof(DataTable) };
    		}
    
    		public override string GetClientScript()
    		{
                return "";
    		}
    
    		public override object Deserialize(IJavaScriptObject o, Type t)
    		{
    			JavaScriptObject ht = o as JavaScriptObject;
    
    			if(ht == null)
    				throw new NotSupportedException();
    
    			if(!ht.Contains("Columns") || !(ht["Columns"] is JavaScriptArray) ||
    				!ht.Contains("Rows") || !(ht["Rows"] is JavaScriptArray))
    			{
    				throw new NotSupportedException();
    			}
    
    			JavaScriptArray columns = (JavaScriptArray)ht["Columns"];
    			JavaScriptArray rows = (JavaScriptArray)ht["Rows"];
    
    			DataTable dt = new DataTable();
    			DataRow row = null;
    			Type colType;
    			JavaScriptArray column;
    
    			if(ht.Contains("TableName") && ht["TableName"] is JavaScriptString)
    				dt.TableName = ht["TableName"].ToString();
    
    			for(int i=0; i<columns.Count; i++)
    			{
    				column = (JavaScriptArray)columns[i];
    				colType = Type.GetType(column[1].ToString(), true);
    				dt.Columns.Add(column[0].ToString(), colType);
    			}
    		
    			JavaScriptArray cols = null;
    			object obj;
    
    			for (int y = 0; y < rows.Count; y++)
    			{
    //				if(!(r is JavaScriptArray))
    //					continue;
    				
    				cols = (JavaScriptArray)rows[y];
    				row = dt.NewRow();
    
    				for (int i = 0; i < cols.Count; i++)
    				{
    					//row[i] = JavaScriptDeserializer.Deserialize((IJavaScriptObject)cols[i], dt.Columns[i].DataType);
    
    					obj = JavaScriptDeserializer.Deserialize((IJavaScriptObject)cols[i],dt.Columns[i].DataType);
    					row[i] = (obj == null) ? DBNull.Value : obj;
    				}
    
    				dt.Rows.Add(row);
    			}
    	
    			return dt;
    		}
    
    		public override string Serialize(object o)
    		{
    			StringBuilder sb = new StringBuilder();
    			Serialize(o, sb);
    			return sb.ToString();
    		}
    
            public string GetSqlType(string typeName)
            {
                switch (typeName)
                {
                    case "String": return "String";
                    case "Int32":
                    case "Int16":
                    case "Int64":
                    case "Decimal":
                    case "Double":
                        return "Number";
                    case "DateTime":
                        return "Date";
                    default:
                        throw new Exception("Typ " + typeName + " kann nicht aufgelöst werden");
                }
            }
    
    		public override void Serialize(object o, StringBuilder sb)
    		{
    			DataTable dt = o as DataTable;
    
    			if(dt == null)
    				throw new NotSupportedException();
    			
    			DataColumnCollection cols = dt.Columns;
    			DataRowCollection rows = dt.Rows;
    
    			bool b = true;
    
    			sb.Append("new ");
    			sb.Append(clientType);
    			sb.Append("([");
    				
    			foreach(DataColumn col in cols)
    			{
    				if(b){ b = false; }
    				else{ sb.Append(","); }
    
    				sb.Append("new YAHOO.tecbehind.DataColumn({id:");
    				JavaScriptUtil.QuoteString(col.ColumnName, sb);
    				sb.Append(",type:");
                    JavaScriptUtil.QuoteString(GetSqlType(col.DataType.Name), sb);
    				sb.Append("})");
    			}
    
    			sb.Append("],[");
    
    			b = true;
    
    			foreach(DataRow row in rows)
    			{
    				if(!b) sb.Append(",");
                    sb.Append("new YAHOO.tecbehind.DataRow(");
    				JavaScriptSerializer.Serialize(row, sb);
                    sb.Append(")");
    				b = false;
    			}
    
    			sb.Append("], '");
                sb.Append(dt.TableName);
                sb.Append("')");
    		}
    	}
    }
    last but not least,

    JSON\Converts\DataRowConverter.js
    Code:
    using System;
    using System.Text;
    using System.Data;
    
    namespace AjaxPro
    {
    	/// <summary>
    	/// Provides methods to serialize and deserialize a DataRow object.
    	/// </summary>
    	public class DataRowConverter : IJavaScriptConverter
    	{
    		public DataRowConverter() : base()
    		{
    			m_AllowInheritance = true;
    
    			m_serializableTypes = new Type[] { typeof(DataRow) };
    		}
    
    		public override string Serialize(object o)
    		{
    			StringBuilder sb = new StringBuilder();
    			Serialize(o, sb);
    			return sb.ToString();
    		}
    
    		public override void Serialize(object o, StringBuilder sb)
    		{
    			DataRow row = o as DataRow;
    
    			if(row == null)
    				throw new NotSupportedException();
    			
    			DataColumnCollection cols = row.Table.Columns;
    			int colcount = cols.Count;
    
    			bool b = true;
    
    			sb.Append("{");
    
    			for(int i=0; i<colcount; i++)
    			{
    				if(b){ b = false; }
    				else{ sb.Append(","); }
                    sb.Append(cols[i].ColumnName);
                    sb.Append(":");
    				JavaScriptSerializer.Serialize(row[cols[i].ColumnName], sb);
    			}
    
    			sb.Append("}");
    		}
    	}
    }
    With that you can use AjaxPro, get a DataSet, and simply trigger

    Code:
    var dataSet = AjaxProNamespace.InterfaceObject.GetRoutings();
    var result = dataSet.select(
       "SELECT Routings.id, Routings.srn, Routings.caller, Routings.destination, Routings.length "+
       "FROM Routings "+
       "ORDER BY Routings.srn" );
    hock:

    and bind that query-result to a grid using JSON or do anything else with it. You can use TrimQuery nearly similar to the LINQ Syntax too:

    Code:
    var _qry = TrimPath.makeQueryLang(dataSet.getSqlModel());
            
           var _stmt1;
            with(_qry) {
                _stmt1 = 
                    SELECT(
                        Routings.srn.AS("srn"), COUNT(Routings.srn).AS("callCount"), Accounts.adr,
                        FROM(Routings, INNER_JOIN(Accounts).ON(EQ(Routings.account, Accounts.id))),
                        GROUP_BY(Routings.srn)
                    );
            }
            var _result = _stmt1.filter(dataSet._getQueryableData());
    :lol:

    Its my current development state! I plan to implement anything as an addon at this, this is why the most class extends YAHOO.ext.util.Observable.

    Now, im interested in you code-implementations using .NET, YUI and YUI-EXT.

    Any suggestions to my code?

    Greetings, Michael

Similar Threads

  1. Rails devs using Ext - what to do?
    By j_l in forum Community Discussion
    Replies: 4
    Last Post: 1 Mar 2007, 6:43 AM
  2. Any chance of SVN build help for a Mac devs?
    By haibijon in forum Ext 1.x: Help & Discussion
    Replies: 2
    Last Post: 13 Jan 2007, 4:19 AM

Thread Participants: 4

Turkiyenin en sevilen filmlerinin yer aldigi xnxx internet sitemiz olan ve porn sex tarzi bir site olan mobil porno izle sitemiz gercekten dillere destan bir durumda herkesin sevdigi bir site olarak tarihe gececege benziyor. Sitenin en belirgin ozelliklerinden birisi de Turkiyede gercekten kaliteli ve muntazam, duzenli porno izle siteleri olmamasidir. Bu yuzden iste. Ayrica en net goruntu kalitesine sahip adresinde yayinlanmaktadir. Mesela diğer sitelerimizden bahsedecek olursak, en iyi hd porno video arşivine sahip bir siteyiz. "The Best anal porn videos and slut anus, big asses movies set..." hd porno faketaxi