Jeff - Sorry, there’s a bug in getQuery
right now. I keep forgetting to fix it. You’re not crazy!
Doug
From: [EMAIL PROTECTED]
[mailto:[EMAIL PROTECTED] On Behalf
Of Jeff Lester
Sent: Saturday, April 29, 2006
8:19 AM
To: [email protected]
Subject: Re: [Reactor For CF] Re:
Iterator getWhere() and getOrder()
Okay, by changing it to
the following I get the results I want however pagination no longer seems to
work. Sorry if these are noob like questions, bit sick and can't seem to see
what I'm missing.
<cffunction name="getVideoPage"
access="Public" returntype="void" output="false"
hint="I get a Page of Videos.">
<cfargument name="event"
type="ModelGlue.Core.Event" required="true" />
<cfset var OrderBy =
arguments.event.getValue("OrderBy","Video") />
<cfset var OrderDir = arguments.event.getValue("OrderDir","ASC")
/>
<cfset var startRow =
arguments.event.getValue("startRow","1") />
<cfset var numRecords =
arguments.event.getValue("numRecords","10") />
<cfset var searchBy =
arguments.event.getValue("searchBy") />
<cfset var searchFor =
arguments.event.getValue("searchFor") />
<cfset var VideoIterator =
Reactor.createIterator("Video") />
<cfset var VideoPage = 0 />
<cfset
VideoIterator.reset() />
<cfif searchBy NEQ
"">
<cfset VideoIterator.getWhere().isLike("Video",searchBy,searchFor)
/>
</cfif>
<cfset
arguments.event.setValue("TotalRecords",VideoIterator.getRecordCount
()) />
<cfset
VideoIterator.reset() />
<cfif searchBy NEQ
"">
<cfset VideoIterator.getWhere().isLike("Video",searchBy,searchFor)
/>
</cfif>
<cfif OrderDir EQ
"DESC">
<cfset VideoIterator.getOrder().setDesc("Video",OrderBy) />
<cfelse>
<cfset VideoIterator.getOrder().setAsc("Video",OrderBy) />
</cfif>
<cfset VideoPage =
VideoIterator.getQuery(val(startRow),val(numRecords)) />
<cfset
arguments.event.setValue ("VideoPage",VideoPage) />
</cffunction>
It returns all records even though it should only return 10...
On 4/29/06, Jeff
Lester <[EMAIL PROTECTED]>
wrote:
But if you look at my function above you'll see that I don't call
getQuery until after I set the getWhere() and getOrder()...
So if this is incorrect then can anyone give me an example of how to create an
Iterator object, filter, sort, then run getQuery, or is there another way to
get filtered sorted pagination results?
On 4/29/06, Doug
Hughes <
[EMAIL PROTECTED]> wrote:
Jeff – The errors says it all. After you call getQuery
or getArray you can't change its order or where clause. This allows for the
addition of features such as adding elements into the iterator and saving them.
You'll most likely run into this issue if you have a cached
iterator that you try to sort each time you use it.
There's a method on the iterator, reset(), which resets the
iterator and will allow you to re-sort it.
Doug
No ideas? I searched the archives...
On
4/29/06, Jeff Lester <[EMAIL PROTECTED]>
wrote:
Hi all,
I've updated to Doug's Reactor BC and I remember reading something about changes
being made to the way iterators handle getOrder(). Below is the function I am
using to get a page of results and return then into a MG value:
<cffunction name="getVideoPage"
access="Public" returntype="void" output="false"
hint="I get a Page of Videos.">
<cfargument name="event"
type=" ModelGlue.Core.Event" required="true" />
<cfset var OrderBy =
arguments.event.getValue("OrderBy","Video") />
<cfset var OrderDir =
arguments.event.getValue ("OrderDir","ASC") />
<cfset var startRow =
arguments.event.getValue("startRow","1") />
<cfset var numRecords =
arguments.event.getValue("numRecords","10") />
<cfset var searchBy =
arguments.event.getValue("searchBy") />
<cfset var searchFor = arguments.event.getValue("searchFor")
/>
<cfset var VideoIterator =
Reactor.createIterator("Video") />
<cfset var VideoPage = 0 />
<cfif searchBy NEQ
"">
<cfset VideoIterator.getWhere().isLike("Video",searchBy,searchFor)
/>
</cfif>
<cfset
arguments.event.setValue("TotalRecords",VideoIterator.getRecordCount())
/>
<cfif OrderDir EQ
"DESC">
<cfset VideoIterator.getOrder().setDesc("Video",OrderBy) />
<cfelse>
<cfset VideoIterator.getOrder().setAsc("Video",OrderBy) />
</cfif>
<cfset VideoPage =
VideoIterator.getQuery(val(startRow),val(numRecords)) />
<cfset
arguments.event.setValue("VideoPage",VideoPage) />
</cffunction>
but I'm getting the following error:
Oops!
|
Message
|
Can Not
Get Order
|
|
Detail
|
Calls
to getOrder are not allowed after getting an iterators query or array data.
You must call reset first, which reset any changes you have made to objects
in the iterator.
|
|
Extended Info
|
|
|
Tag Context
|
D:\Inetpub\wwwroot\Reactor\iterator\iterator.cfc
(780)
D:\Inetpub\wwwroot\jjVideos\controller\VideoController.cfc (38)
D:\Inetpub\wwwroot\ModelGlue\ModelGlue.cfc (482)
D:\Inetpub\wwwroot\ModelGlue\ModelGlue.cfc (379)
D:\Inetpub\wwwroot\ModelGlue\ModelGlue.cfc (336)
D:\Inetpub\wwwroot\ModelGlue\ModelGlue.cfc (296)
D:\Inetpub\wwwroot\ModelGlue\ModelGlue.cfm (64)
D:\Inetpub\wwwroot\jjVideos\index.cfm (27)
|
So the question is, what do I need to change to make this still work?
-- Reactor for ColdFusion Mailing List -- [email protected]
-- Archives at http://www.mail-archive.com/reactor%40doughughes.net/
-- Reactor for ColdFusion Mailing List -- [email protected]
-- Archives at http://www.mail-archive.com/reactor%40doughughes.net/
-- Reactor for ColdFusion Mailing List -- [email protected]
-- Archives at http://www.mail-archive.com/reactor%40doughughes.net/
|