Je te donne un petit exemple. De tête donc à vérifier sur les détails.
Imaginons que tu souhaites récupérer, dans une base de données par
exemple, des informations sur un utilisateur. Dans la partie
Cappuccino, tu va utiliser une CPURLConnection comme ceci :
var request = [CPURLRequest requestWithURL:url];
var connection = [CPURLConnection connectionWithRequest:request
delegate:self];
Dans ce code, url est une variable contenant la route vers ton
contrôleur Rails. Donc si par exemple tu as un ID pour ton
utilisateur, tu peux coder une méthode comme ceci :
-(void)getUserInformationByID:(int)userID
{
var url = “/userinfo/”+userID
var request = [CPURLRequest requestWithURL:url];
var connection = [CPURLConnection connectionWithRequest:request
delegate:self];
}
Maintenant dans Rails il te faut un contrôleur qui répond à la route
/userinfo/ID. Ce contrôleur va renvoyer une réponse au fromat JSON.
Disons un truc du genre :
{ :usreinfo => { :name => nameFromDB, :age => ageFromDB } }.to_json
Maintenant, dans Cappuccino, il faut que tu créés deux délégués pour
gérer la réponse :
- (void)connection:(CPURLConnection)connection
didReceiveData:(CPString)data
{
var result = CPJSObjectCreateWithJSON(data);
if( result.userinfo )
{
// result.userinfo.name contient le nom
// result.userinfo.age contient l’age
}
}
Dans ce premier délégué, tu récupères les données (data) au format
JSON via CPJSObjectCreateWithJSON. Ensuite dans dans result tu as bien
l’attribut userinfo, c’est que tu es face à la réponse concernant tu
user. Donc, tu peux récupérer les données : l’age via
result.userinfo.age et le nom via result.userinfo.name. Je fais cela
parce qu’il n’est pas rare d’utiliser ce délégué pour plusieurs types
de requêtes. Note que tu peux également vérifier via la connexion.
Le second délégué dont tu as besoin est :
- (void)connection:(CPURLConnection)aConnection
didFailWithError:(CPString)error
{
alert(error);
}
Il sert simplement à traiter les cas d’erreurs.
Voilà. J’espère que c’est plus clair.
Greg
Le 13 mai 2009 14:16, Zaphod B. [email protected] a écrit :