Je rencontre un problème lors de l'utilisation de CFGRID avec JQuery. Voici les codes d'échantillons en utilisant la base de données CFARTGALLERY:Utilisation de CFGRID avec JQuery
gridtest.cfm
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<cfajaximport tags="cfform,cfgrid">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>CFGRID Test</title>
</head>
<cfinvoke component="gridtest" method="getartistname" returnvariable="artistname" />
<body>
<cfform name="frmArtists" format="html">
<cfselect name="selArtist" query="artistname" queryPosition="below" display="lastname" value="artistid">
<option value="0">Select artist...</option>
</cfselect>
<p></p>
<cfgrid name="artgrid"
bind="cfc:gridtest.getartname({cfgridpage},
{cfgridpagesize},
{cfgridsortcolumn},
{cfgridsortdirection},
{selArtist})"
format="html"
pagesize="8"
bindOnLoad="false"
selectmode="browse"
width="400">
<cfgridcolumn name="artname" header="Art Name" display="yes" width="400">
</cfgrid>
</cfform>
</body>
</html>
Il a un contrôle simple CFSELECT pour sélectionner le nom de l'artiste, et quand on clique dessus, l'cfgrid montre les noms des œuvres d'art.
Voici le CFC (gridtest.cfc):
<cfcomponent>
<cfset application.datasource="cfartgallery">
<cfset cfartgallery=#application.datasource#>
<cffunction name="getArtistName" access="public" returntype="query">
<cfquery name="artistname" datasource="#cfartgallery#">
SELECT ARTISTID,LASTNAME
FROM ARTISTS
ORDER BY LASTNAME
</cfquery>
<cfreturn artistname>
</cffunction>
<cffunction name="getartname" access="remote" returntype="struct">
<cfargument name="page" type="numeric" required="true">
<cfargument name="pagesize" type="numeric" required="true">
<cfargument name="pagesortcolumn" type="string" required="false" default="">
<cfargument name="pagesortdir" type="string" required="false" default="">
<cfargument name="artistid" type="numeric" required="yes">
<cfset var artname="">
<cfquery name="artname" datasource="#cfartgallery#">
SELECT ARTNAME
FROM ART
WHERE ARTISTID=<cfqueryparam cfsqltype="cf_sql_integer" value="#arguments.artistid#">
</cfquery>
<cfreturn QueryConvertForGrid(artname,page,pagesize)>
</cffunction>
</cfcomponent>
Jusqu'à présent, si bon. Mais si j'utilise une page d'emballage en utilisant la fonction de charge de JQuery, comme si (gridtestmain.cfm):
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<script type="text/javascript" src="http://code.jquery.com/jquery-latest.js"></script>
<script type="text/javascript">
$(document).ready(function(){
$('#div1').load('gridtest.cfm');
});
</script>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>CFGRID Test Under JQuery</title>
</head>
<body>
<div id="div1">
</div>
</body>
</html>
Le cfgrid disparaît avec seulement une boîte de limite. Dans IE, il signale une erreur de 'Ext.EventObject est null ou un objet.' La recherche sur le réseau suggère que la bibliothèque Ext a été chargée plusieurs fois à l'origine du problème, mais je ne vois pas où elle est chargée plus d'une fois.
Est-ce une limitation de JQuery? Ou est-ce que je le fais de la mauvaise façon? Toutes les suggestions sont très appréciées.
Salut Ben, je suis loin du projet depuis un moment et je ne peux pas tester votre suggestion jusqu'à maintenant. Vous avez raison, je dois envelopper le formulaire dans la div de la page d'appel au lieu d'appeler le formulaire à distance. Je suppose que dans ce cas, la modularité est hors de question. :) – lawrencem49
Il existe de nombreuses façons de le faire de façon modulaire. Mais, fondamentalement, vous devez avoir les bibliothèques JS déjà chargées (ou liées manuellement dans votre formulaire) pour que cela fonctionne. –