Hi Blair,
Here is some hacked code out of fourq.cfc (5.2.something not necessarily
current)
that appends stParam attributes to the URL passed to ajax function
(search for AJM for hacks)
Thoughts / Comments
<cffunction name="getView" access="public" output="true"
returntype="string" hint="Returns the HTML of a view from the webskin
content type folder.">
<cfargument name="objectid" required="no" type="string" default=""
hint="ObjectID of the object that is to be rendered by the webskin view." />
<cfargument name="template" required="no" type="string" default=""
hint="Name of the template in the corresponding content type webskin folder,
without the .cfm extension." />
<cfargument name="webskin" required="no" type="string" default=""
hint="Name of the template in the corresponding content type webskin folder,
without the .cfm extension." />
<cfargument name="stparam" required="false" type="struct"
default="#structNew()#" hint="Structure of parameters to be passed into the
display handler." />
<cfargument name="stobject" required="no" type="struct"
hint="Property structure to render in view. Overrides any property
structure mapped to arguments.objectid. Useful if you want to render a view
with a modified content item.">
<cfargument name="dsn" required="no" type="string"
default="#application.dsn#">
<cfargument name="OnExit" required="no" type="any" default="">
<cfargument name="alternateHTML" required="no" type="string"
hint="If the webskin template does not exist, if this argument is sent in,
its value will be passed back as the result.">
<cfargument name="hashKey" required="no" default="" type="string"
hint="Pass in a key to be used to hash the objectBroker webskin cache">
<cfargument name="bAjax" required="no" default="0" type="boolean"
hint="Flag to determine whether to render an ajax call to load the webskin
instead of inline." />
<cfargument name="ajaxID" required="no" default="" type="string"
hint="The id to give the div that will call the ajaxed webskin" />
<cfargument name="ajaxShowloadIndicator" required="no"
default="false" type="boolean" hint="Should the ajax loading indicator be
shown" />
<cfargument name="ajaxindicatorText" required="no"
default="loading..." type="string" hint="What should be text of the loading
indicator" />
<cfargument name="bIgnoreSecurity" required="false" type="boolean"
default="false" hint="Should the getView() ignore webskin security" />
<cfargument name="bAllowTrace" required="false" type="boolean"
default="true" hint="Sometimes having webskin trace information can break
the integrity of a page. This allows you to turn it off." />
<cfset var stResult = structNew() />
<cfset var stObj = StructNew() />
<cfset var WebskinPath = "" />
<cfset var stWebskin = structNew() />
<cfset var stCurrentView = structNew() />
<cfset var stArgs = structnew() />
<cfset var i = 0 />
<cfset var stLocal = structNew() /><!--- A local scope that can be
used in webskins to ensure against race conditions. --->
<cfset var webskinTypename = "" /><!--- This will store the typename
of the webskin to be called. Required in the case of Type Webskins. --->
<cfset var iViewState = "" /><!--- iterator used when adding to
ancestor cacheBySessionVar lists --->
<cfset var lAttributes =
"stobject,typename,objectid,key,template,webskin,stprops,stparam,r_html,r_objectid,hashKey,alternateHTML,OnExit,dsn,bAjax,ajaxID,ajaxShowloadIndicator,ajaxindicatorText,bIgnoreSecurity"
/>
<cfset var attrib = "" />
<cfset var lHashKeys = "" />
<cfset var iHashKey = "" />
<cfset var urlParameters = "" /> <!--- AJM --->
<cfimport taglib="/farcry/core/tags/extjs" prefix="extjs" />
<cfimport taglib="/farcry/core/tags/webskin" prefix="skin" />
<cfimport taglib="/farcry/core/tags/farcry" prefix="farcry" />
<!--- Initialise webskin trace array --->
<cfparam name="request.aAncestorWebskinsTrace"
default="#arrayNew(1)#" /><!--- To Be Used for Trace Tree --->
<!--- init fourq --->
<cfset fourqInit() />
<cfset webskinTypename = "#variables.typename#" /><!--- Set the
typename to the typename of this object instance --->
<cfif len(arguments.webskin)>
<cfset arguments.template = arguments.webskin />
<cfelseif not len(arguments.template)>
<cfthrow message="The getView function requires the template or
webskin argument.">
</cfif>
<!--- make sure that .cfm isn't passed to this method in the
template argument --->
<cfif listLast(arguments.template,".") EQ "cfm">
<cfset arguments.template =
ReplaceNoCase(arguments.template,".cfm", "", "all") />
</cfif>
<cftimer label="view: #webskinTypename# #arguments.template#">
<cfif isDefined("arguments.stobject") and not
structIsEmpty(arguments.stObject)>
<cfset stobj=arguments.stobject />
<cfelse>
<cfif not len(arguments.objectid)>
<!---
WE WANT TO CALL A TYPE WEBSKIN
THIS MEANS THAT THE OBJECT THAT WE ARE PASSING TO THE
WEBSKIN IS ACTUALLY THE farCOAPI object.
THE WEBSKIN CACHING IS ALSO DONE AGAINST THE farCOAPI
object.
--->
<cfset stObj =
application.fc.factory['farCoapi'].getCoapiObject(name="#webskinTypename#")
/>
<cfelse>
<!--- get the data for this instance --->
<cfset stObj =
getData(objectid=arguments.objectID,dsn=arguments.dsn)>
</cfif>
</cfif>
<cfif arguments.bAjax>
<cfif not len(arguments.ajaxID)>
<cfset arguments.ajaxID =
"#stobj.typename#_#stobj.objectid#_#arguments.template#" />
</cfif>
<skin:htmlHead library="extjsCore" />
<skin:htmlHead id="webskinAjaxLoader">
<cfoutput>
<script type="text/javascript">
function
webskinAjaxLoader(divID,action,timeout,showLoadIndicator,indicatorText){
if (timeout == undefined){var timeout = 30};
if (showLoadIndicator == undefined){var showLoadIndicator =
false};
if (indicatorText == undefined){var indicatorText =
'loading...'};
var el = Ext.get(divID);
if(el) {
var mgr = el.getUpdater();
mgr.showLoadIndicator = showLoadIndicator;
if (showLoadIndicator==true){
mgr.indicatorText = indicatorText;
}
mgr.update(
{
url: action,
nocache: true,
scripts: true,
timeout: timeout
});
}
}
</script>
</cfoutput>
</skin:htmlHead>
<!--- Get the url for the ajax webskin loader --->
<!--- AJM: add stParams to URL --->
<cfset urlParameters="view=#arguments.template#&ajaxmode=1" />
<!--- Setup custom attributes passed into getView in stParam
structure --->
<cfif not structIsEmpty(arguments.stParam)>
<cfset lHashKeys =
listSort(structKeyList(arguments.stParam),"text", "asc") />
<cfloop list="#lHashKeys#" index="iHashKey">
<cfif IsSimpleValue(arguments.stParam[iHashKey])>
<cfset urlParameters =
"#urlParameters#&#iHashKey#=#arguments.stParam[iHashKey]#" />
<cfelse>
<!--- dunno?? --->
</cfif>
</cfloop>
</cfif>
<cfset urlAjaxLoader =
application.fapi.getLink(type="#stobj.typename#",
objectid="#stobj.objectid#", urlParameters="#urlParameters#") />
<!--- /AJM --->
<!--- AJM <cfset urlAjaxLoader =
application.fapi.getLink(type="#stobj.typename#",
objectid="#stobj.objectid#",
urlParameters="view=#arguments.template#&ajaxmode=1") /> --->
<cfsavecontent variable="stWebskin.webskinHTML">
<cfoutput>
<farcry:traceWebskin
objectid="#stobj.objectid#"
typename="#stobj.typename#"
template="#arguments.template#">
<div id="#arguments.ajaxID#"></div>
</farcry:traceWebskin>
<extjs:onReady>
<cfoutput>
webskinAjaxLoader('#arguments.ajaxID#',
'#urlAjaxLoader#', 30, #arguments.ajaxShowLoadIndicator#,
'#arguments.ajaxIndicatorText#');
</cfoutput>
</extjs:onReady>
</cfoutput>
</cfsavecontent>
<cfelse>
<!--- Setup custom attributes passed into getView in stParam
structure --->
<cfloop collection="#arguments#" item="attrib">
<cfif not listFindNoCase(lAttributes, attrib)>
<cfset arguments.stParam[attrib] = arguments[attrib] />
</cfif>
</cfloop>
<!--- If we are potentially caching this webskin, and we have
passed in parameters, we need to create a hash key that uniquely identifies
these parameters and cache agains them --->
<cfif application.bObjectBroker AND
application.stcoapi[webskinTypename].bObjectBroker AND
len(arguments.template) AND
structKeyExists(application.stcoapi[webskinTypename].stWebskins,
arguments.template) AND
application.stcoapi[webskinTypename].stWebskins[arguments.template].cacheStatus
EQ 1>
<cfif not structIsEmpty(arguments.stParam)>
<cfset lHashKeys =
listSort(structKeyList(arguments.stParam),"text", "asc") />
<cfloop list="#lHashKeys#" index="iHashKey">
<cfif IsSimpleValue(arguments.stParam[iHashKey])>
<cfset arguments.hashKey =
listAppend(arguments.hashKey,
"stParam[#iHashKey#]:#arguments.stParam[iHashKey]#") />
<cfelse>
<cfset arguments.hashKey =
listAppend(arguments.hashKey, "stParam[#iHashKey#]:{complex}") />
</cfif>
</cfloop>
</cfif>
</cfif>
<!--- Check permissions on this webskin --->
<cfif not bIgnoreSecurity>
<cfif arguments.template eq "deniedaccess" or not
application.security.checkPermission(type=webskinTypename,webskin=arguments.template)>
<!--- Make sure this page doesn't get cached --->
<cfif structKeyExists(request, "aAncestorWebskins")>
<cfloop from="1"
to="#arraylen(request.aAncestorWebskins)#" index="i">
<cfset request.aAncestorWebskins[i].okToCache =
0 />
<cfif structKeyExists(stCurrentView,
"cacheTimeout")>
<cfset
request.aAncestorWebskins[i].cacheTimeout = stCurrentView.cacheTimeout />
</cfif>
</cfloop>
</cfif>
<cfsavecontent
variable="stWebskin.webskinHTML"><cfinclude
template="#getWebskinPath(webskinTypename,'deniedaccess')#"
/></cfsavecontent>
<cfreturn stWebskin.webskinHTML />
</cfif>
</cfif>
<cfif NOT structIsEmpty(stObj)>
<cfset stWebskin =
application.fc.lib.objectbroker.getWebskin(objectid=stobj.objectid,
typename=stobj.typename, template=arguments.template,
hashKey="#arguments.hashKey#") />
<cfif not len(stWebskin.webskinHTML)>
<cfif stobj.typename EQ "farCoapi">
<!--- This means its a type webskin and we need to
look for the timeout value on the related type. --->
<cfset stCoapi =
application.fc.factory['farCoapi'].getData(objectid="#stobj.objectid#") />
<cfset webskinTypename = stCoapi.name />
</cfif>
<cfset webskinPath =
application.coapi.coapiadmin.getWebskinPath(typename=webskinTypename,
template=arguments.template) />
<cfif len(webskinPath)>
<cfset stWebskin.webskinHTML = runView(
stobj="#stobj#",
webskinTypename="#webskinTypename#",
webskinTemplate="#arguments.template#",
webskinPath="#webskinPath#",
webskinCacheID="#stWebskin.webskinCacheID#",
hashKey="#arguments.hashKey#",
stParam="#arguments.stParam#",
OnExit="#arguments.onExit#",
dsn="#arguments.dsn#",
bAllowTrace="#arguments.bAllowTrace#") />
<cfelseif structKeyExists(arguments, "alternateHTML")>
<cfset stWebskin.webskinHTML =
arguments.alternateHTML />
<cfelse>
<cfthrow type="Application"
message="Error: Template not found
[/webskin/#webskinTypename#/#arguments.template#.cfm] and no alternate html
provided."
detail="Error: Template not found
[/webskin/#webskinTypename#/#arguments.template#.cfm] and no alternate html
provided. typename: #stobj.typename#. objectid: #stobj.objectid#." />
</cfif>
</cfif>
<cfelse>
<cfthrow type="Application" detail="Error: When trying to
render [/webskin/#webskinTypename#/#arguments.template#.cfm] the object was
not created correctly." />
</cfif>
<cfif structKeyExists(request, "aAncestorWebskins") AND
arrayLen(request.aAncestorWebskins)>
<cfset request.currentViewTypename =
request.aAncestorWebskins[arrayLen(request.aAncestorWebskins)].typename />
<cfset request.currentViewTemplate =
request.aAncestorWebskins[arrayLen(request.aAncestorWebskins)].template />
</cfif>
</cfif>
</cftimer>
<cfreturn stWebskin.webskinHTML />
</cffunction>
2009/10/21 Blair McKenzie <[email protected]>
> You can't. bAjax is just a shortcut for a very simple case. If you want to
> do something more complex you really need to do it yourself.
>
> Blair
>
>
> On Wed, Oct 21, 2009 at 4:17 PM, AJ Mercer <[email protected]> wrote:
>
>> I have the following code
>> <skin:view typename="pslClient" template="displayBodyASXNews"
>> bAjax="false" stProperties="#stObj#" />
>> that populates the stParam struct with stProperties
>>
>> But where I set bAjax to TRUE it does not get passed in
>> Which is most likely fair enough can the browser is calling the webskin
>> directly
>>
>> So, how do you go about passing data to an ajax webskin?
>>
>> In this instance, it is within a rule execute.cfm
>>
>>
>> Farcry 5.2
>>
>> --
>> AJ Mercer
>> Web Log: http://webonix.net
>>
>>
>>
>
> >
>
--
AJ Mercer
Web Log: http://webonix.net
--~--~---------~--~----~------------~-------~--~----~
You received this message cos you are subscribed to "farcry-dev" Google group.
To post, email: [email protected]
To unsubscribe, email: [email protected]
For more options: http://groups.google.com/group/farcry-dev
--------------------------------
Follow us on Twitter: http://twitter.com/farcry
-~----------~----~----~----~------~----~------~--~---