logologo
Démarrer
Manuel
Développement
Plugins
API
Accueil
English
简体中文
日本語
한국어
Español
Português
Deutsch
Français
Русский
Démarrer
Manuel
Développement
Plugins
API
Accueil
logologo
Présentation de RunJS
Importation de modules
Rendu dans le conteneur

Variables globales

window
document
navigator

ctx

ctx.blockModel
ctx.collection
ctx.collectionField
ctx.dataSource
ctx.dataSourceManager
ctx.element
ctx.exit()
ctx.exitAll()
ctx.filterManager
ctx.form
ctx.getModel()
ctx.getValue()
ctx.getVar()
ctx.i18n
ctx.importAsync()
ctx.initResource()
ctx.libs
ctx.location
ctx.logger
ctx.makeResource()
ctx.message
ctx.modal
ctx.model
ctx.notification
ctx.off()
ctx.on()
ctx.openView()
ctx.render()
ctx.request()
ctx.requireAsync()
ctx.resource
ctx.route
ctx.router
ctx.setValue()
ctx.sql
ctx.t()
ctx.view
Next PagePrésentation de RunJS
Avis de traduction IA

Ce document a été traduit par IA. Pour des informations précises, veuillez consulter la version anglaise.

#SingleRecordResource

Une ressource orientée vers un enregistrement unique : les données correspondent à un objet unique, prenant en charge la récupération par clé primaire, la création/mise à jour (save) et la suppression. Elle est adaptée aux scénarios d'"enregistrement unique" tels que les détails et les formulaires. Contrairement à MultiRecordResource, la méthode getData() de SingleRecordResource retourne un objet unique. Vous spécifiez la clé primaire via setFilterByTk(id), et save() appellera automatiquement create ou update en fonction de l'état de isNewRecord.

Hiérarchie d'héritage : FlowResource → APIResource → BaseRecordResource → SingleRecordResource.

Méthode de création : ctx.makeResource('SingleRecordResource') ou ctx.initResource('SingleRecordResource'). Vous devez appeler setResourceName('nom_de_la_collection') avant l'utilisation. Pour les opérations par clé primaire, utilisez setFilterByTk(id). Dans RunJS, ctx.api est injecté par l'environnement d'exécution.


#Scénarios d'utilisation

ScénarioDescription
Bloc de détailsLe bloc de détails utilise SingleRecordResource par défaut pour charger un enregistrement unique via sa clé primaire.
Bloc de formulaireLes formulaires de création/édition utilisent SingleRecordResource, où save() distingue automatiquement la création (create) de la mise à jour (update).
Détails JSBlockCharger un utilisateur, une commande, etc., dans un JSBlock et personnaliser l'affichage.
Ressources associéesCharger des enregistrements uniques associés en utilisant le format users.profile, ce qui nécessite setSourceId(ID_enregistrement_parent).

#Format des données

  • getData() retourne un objet d'enregistrement unique, correspondant au champ data de la réponse de l'API get.
  • getMeta() retourne les métadonnées (si disponibles).

#Nom de la ressource et clé primaire

MéthodeDescription
setResourceName(name) / getResourceName()Nom de la ressource, par ex. 'users', 'users.profile' (ressource associée).
setSourceId(id) / getSourceId()L'ID de l'enregistrement parent pour les ressources associées (par ex. users.profile nécessite la clé primaire de l'enregistrement users).
setDataSourceKey(key) / getDataSourceKey()Identifiant de la source de données (utilisé dans les environnements multi-sources).
setFilterByTk(tk) / getFilterByTk()La clé primaire de l'enregistrement actuel ; une fois définie, isNewRecord devient false.

#État

Propriété/MéthodeDescription
isNewRecordIndique s'il s'agit d'un "nouvel" enregistrement (vrai si filterByTk n'est pas défini ou s'il vient d'être créé).

#Paramètres de requête (Filtre / Champs)

MéthodeDescription
setFilter(filter) / getFilter()Filtre (disponible lorsqu'il ne s'agit pas d'un nouvel enregistrement).
setFields(fields) / getFields()Champs demandés.
setAppends(appends) / getAppends() / addAppends / removeAppendsChargement des associations (appends).

#CRUD

MéthodeDescription
refresh()Effectue une requête get basée sur le filterByTk actuel et met à jour getData() ; ne fait rien en état "nouveau".
save(data, options?)Appelle create en état "nouveau", sinon appelle update ; l'option { refresh: false } empêche le rafraîchissement automatique.
destroy(options?)Supprime l'enregistrement basé sur le filterByTk actuel et efface les données locales.
runAction(actionName, options)Appelle n'importe quelle action de ressource.

#Configuration et événements

MéthodeDescription
setSaveActionOptions(options)Configuration de la requête pour l'action save.
on('refresh', fn) / on('saved', fn)Déclenché après la fin du rafraîchissement ou après la sauvegarde.

#Exemples

#Récupération et mise à jour de base

ctx.initResource('SingleRecordResource');
ctx.resource.setResourceName('users');
ctx.resource.setFilterByTk(1);
await ctx.resource.refresh();
const user = ctx.resource.getData();

// Mise à jour
await ctx.resource.save({ name: 'Jean Dupont' });

#Créer un nouvel enregistrement

const newRes = ctx.makeResource('SingleRecordResource');
newRes.setResourceName('users');
await newRes.save({ name: 'Marie Durand', email: 'mariedurand@example.com' });

#Supprimer un enregistrement

ctx.resource.setResourceName('users');
ctx.resource.setFilterByTk(1);
await ctx.resource.destroy();
// Après destroy, getData() retourne null

#Chargement d'associations et de champs

ctx.resource.setResourceName('users');
ctx.resource.setFilterByTk(1);
ctx.resource.setFields(['id', 'nickname', 'email']);
ctx.resource.setAppends(['profile', 'roles']);
await ctx.resource.refresh();
const user = ctx.resource.getData();

#Ressources associées (par ex. users.profile)

const res = ctx.makeResource('SingleRecordResource');
res.setResourceName('users.profile');
res.setSourceId(ctx.record?.id); // Clé primaire de l'enregistrement parent
res.setFilterByTk(profileId);    // filterByTk peut être omis si profile est une relation hasOne
await res.refresh();
const profile = res.getData();

#Sauvegarde sans rafraîchissement automatique

await ctx.resource.save({ status: 'active' }, { refresh: false });
// getData() conserve l'ancienne valeur car le rafraîchissement n'est pas déclenché après la sauvegarde

#Écoute des événements refresh / saved

ctx.resource?.on?.('refresh', () => {
  const data = ctx.resource.getData();
  ctx.render(<div>Utilisateur : {data?.nickname}</div>);
});
ctx.resource?.on?.('saved', (savedData) => {
  ctx.message.success('Enregistré avec succès');
});
await ctx.resource?.refresh?.();

#Remarques

  • setResourceName est obligatoire : Vous devez appeler setResourceName('nom_de_la_collection') avant l'utilisation, sinon l'URL de la requête ne pourra pas être construite.
  • filterByTk et isNewRecord : Si setFilterByTk n'est pas appelé, isNewRecord est true, et refresh() n'initiera pas de requête ; save() exécutera une action create.
  • Ressources associées : Lorsque le nom de la ressource est au format parent.child (par ex. users.profile), vous devez d'abord appeler setSourceId(clé_primaire_parent).
  • getData retourne un objet : Les données retournées par les API d'enregistrement unique sont un objet d'enregistrement ; getData() retourne cet objet directement. Il devient null après destroy().

#Liens connexes

  • ctx.resource - L'instance de ressource dans le contexte actuel
  • ctx.initResource() - Initialiser et lier à ctx.resource
  • ctx.makeResource() - Créer une nouvelle instance de ressource sans liaison
  • APIResource - Ressource API générale requise par URL
  • MultiRecordResource - Orientée vers les collections/listes, prenant en charge le CRUD et la pagination