Hi Craig,

My turn to be a little confused....(!)  
Simplest things first (and my very sincere apologies in advance if I tell 
you anything you already know!!):

   1. Flexigrid / jqgrid -- two different libraries (functionally and 
   feature-wise, the latter is the more powerful) 
   2. TW / TW2 -- two rather different 'engines'
   3. core.jqGridWidget -- perhaps think of this as access to the raw 
   jqgrid and a means of displaying rows of 'data'
   4. sqla.SQLAjqGridWidget -- a jqgrid which is closely bound to an 
   sqlalchemy object model.

As you say, they all work but they (perhaps) serve different purposes.  As 
to flexigrid/jqgrid, your choice... but the latter is unquestionably more 
advanced and I find it aesthetically more pleasing (as far as I'm aware 
there's no TW2 widget/wrapper for flexigrid). 

As to TW / TW2 (and in fact as per the tutorial you linked to by Ralph 
Bean), in a new project I simply switch TW off and use only the latter. As 
per the docs etc. TW and TW2 can be used in the same project (ie they can 
both be 'switched on' at the same time) but I prefer the syntax of the 
latter and -- here I really hope that I'm not speaking out of line(!) -- 
consensus appears to be in favour of TW2, that's certainly where the 
development is most active.

Just very quickly, I'll address the question you asked about having to 
query and "then throw away all but 25 of them".   If you look at the 
resulting jqgrid you'll see in the pager/navgrid "page 1 of P" and on the 
right hand side, "records 1 to n of Z",  where Z is the total number of 
rows in the recordset.  So, very simply let's say there are 10,000 records 
in your table, you've now filtered the recordset to show only those whose 
first name is "Mary", and you're left with 300 records. If you look 
carefully at the code I sent, this will now become immediately apparent   
You query/filter --- and then count the total number records (the Z has to 
come from somewhere, right? :)  ) and then limit/offset depending on the 
number of records to display per page (let's say 25) and the page number 
you're on.  (that make sense?!) 

So, time to close some doors!  We're now talking about using jqgrid with 
TW2:  your choice of jqGridWidget vs SQLAjqGridWidget...  And now it very 
much depends on what it is that you're trying to accomplish and the 'object 
model' you're using.  Fundamentally, it's a question about 'layers of 
abstraction':

   - the SQLAlchemy ORM sits on top of the 'expression language',  
   - SQLAjqGridWidget sits on top of (indeed, inherits from) jqGridWidget.
   - (the jqgrid itself just wants to point at a URL which will give it a 
   json representation of the data)

Very broadly speaking, if you have a simple object model and, all things 
being equal, in order to query it you'd use the object model/ORM then the 
SQLAjqGridWidget will almost certainly get you there...  Essentially, the 
SQLAjqGridWidget takes the job away from you and constructs the 
[@expose('json')] controller method/query for you -- granted, you lose 
visibility of what exactly is being queried but in a great many cases this 
may well be exactly what you're looking for. 

If on the other hand the object model is more complex or you find yourself 
needing (or wanting) to use the expression language directly (don't forget 
that the ORM is an abstraction of the expression language, it's slower and 
provides less fine-grained control) then you will almost certainly have to 
provide the controller method (ie the code snippet that I provided earlier) 
yourself. In a nutshell, if you want full control of the query you'll be 
using jqGridWidget.

I really hope that this explanation has revealed more than it's obscured, 
but if you still have questions I'd be happy to try and help.

Regards,

Rob 


Am Samstag, 21. Juli 2012 10:18:39 UTC+1 schrieb Craig Small:
>
> On Thu, Jul 19, 2012 at 09:04:33PM -0400, Michael Pedersen wrote: 
> >    I'm not sure what question you're actually asking here, but I'll try 
> to 
> >    explain what I can. 
> OK, I'll give some examples. It could well be I'm just confused, but it 
> probably means others are too. TG (and TW) are both great, it is just a 
> bit hard to understand the documents. 
>
> http://turbogears.org/2.1/docs/main/ToscaWidgets/Cookbook/FlexiGrid.html 
> This is the style Rob also mentions. This tutorial uses tw1 not tw2 but 
> it seems to follow through. The FlexiGrid uses a json call back to the 
> server called fetch.  I'm a little confused why you would do a query 
> THEN place a limit about 5 lines down, doesn't this mean you fetch 100s 
> of database rows and then throw away all but 25 of them? 
> This documentation is deprecated in 2.2 with no replacement, I assume 
> because it is TW1 and not TW2. 
> Both the widget and the json method have the model in them. The widget 
> specifies what columns are seen and the method access the specific 
> model. This way seems the clearest to me. 
>
> http://www.toscawidgets.org/documentation/tw2.core/turbogears.html 
> About 3/4 down the page there is a section called "Getting Fancier" 
> This grid accesses its data through a url like 
> /tw2_controllers/db_jqgrid/ but to get it to work you have to muck 
> around with the app_config.py to make a new middleware.  It only 
> talks about TG2.1 and 2.0 Uses the SQLAjqGridWidget which filters the 
> column and what model to query. 
>
>
> http://threebean.org/blog/2011/04/30/tutorial-melting-your-face-off-with-tw2-and-turbogears2-1/
>  
> Ralph Bean's tutorial.  This had a lot of those "I get it now" moments. 
> This creates a widget inherited from SQLAjqGridWidget that then calls 
> a common url. But the method is two lines long. The widget specifies 
> the model used. 
>
> For #2 and #3 I don't see how you can do things like filter from the 
> initial standpoint. The filters work with a user playnig with a grid but 
> for a page like /parent/42 I'd like to display a grid of all the children 
> of parent #42 and only show them no matter what the user clicks on the 
> grid. 
>
> They all work btw, I have test code that more or less does all three 
> methods; I'm just not sure what is the right one to use. 
>
>  - Craig 
> -- 
> Craig Small VK2XLZ   http://enc.com.au/          csmall at : enc.com.au 
> Debian GNU/Linux     http://www.debian.org/      csmall at : debian.org 
> GPG fingerprint:     5D2F B320 B825 D939 04D2  0519 3938 F96B DF50 FEA5 
>

-- 
You received this message because you are subscribed to the Google Groups 
"TurboGears" group.
To view this discussion on the web visit 
https://groups.google.com/d/msg/turbogears/-/w1mBThG3CAEJ.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/turbogears?hl=en.

Reply via email to