Je crée une application WEB avec Rails. La valeur d'expérience de Ruby on Rails est d'environ un an en septembre. Je suis venu pour pouvoir créer diverses fonctions, je vais donc les résumer un peu. Comment faites-vous une telle fonction? Veuillez commenter s'il y a quelque chose comme. pense.
Officiel: [https://jquery.com/:title]
Si vous regardez cet article, je ne pense pas que ce soit nécessaire, mais je l'ai cité sur Wikipedia.
jQuery est une bibliothèque JavaScript conçue pour faciliter l'écriture de code JavaScript pour les navigateurs Web. John Resig l'a sorti au BarCamp NYC en janvier 2006. Il est utilisé dans diverses situations, et certains l'appellent le standard de facto pour les bibliothèques JavaScript [2]. La copie de capture sous le logo est "écrire moins, faire plus" (ce qui signifie "faire plus avec moins de description").
Source: [https://ja.wikipedia.org/wiki/JQuery:title]
Vous pouvez obtenir l'élément DOM avec jquery, manipuler l'élément DOM par l'action à ce moment-là, ajouter ou supprimer la classe et effectuer un traitement asynchrone avec ajax.
(Je pense que les gens vont trouver "Qu'est-ce qu'un élément DOM?" Lorsqu'on leur demande "Qu'est-ce qu'un élément DOM?")
Par exemple, comme ceci ↓
[https://watablogtravel.com/document-object-model/:title]
$(document).on('change', '[name^="company[purchases_attributes]["][name$="][product_code]"]', function(){
var supplier_product_code = $(this).nearest('[name^="company[purchases_attributes]"][name$="[supplier_product_code]"]');
$.ajax({
url: '/suppliers/purchases/get_supplier_product_code',
type: "GET",
dataType: "json",
headers: { 'X-CSRF-Token': token },
data: { "product_code": $(this).val(), "supplier_product_code": supplier_product_code.val() },
success: function (data) {
supplier_product_code.val(data.supplier_product_code);
supplier_product_code.trigger('change');
},
error: function () {
supplier_product_code.val("");
supplier_product_code.trigger('change');
}
});
})
Dans cette partie des 1ère et 2ème lignes, j'ai personnellement trouvé pratique d'obtenir l'élément DOM avec une correspondance de préfixe, une correspondance de suffixe et une condition "et" (&&).
En écrivant comme la deuxième ligne, le nom commence par entreprise [achats_attributes]
et le nom se termine par [code_produit_produit]
$(this).nearest('[name^="company[purchases_attributes]"][name$="[supplier_product_code]"]');
La correspondance de préfixe et la correspondance de suffixe sont utilisées en même temps.
Ainsi, par exemple, `nom ^ =" société [achats_attributs] [123456] [code_produit_fournisseur] ʻet d'autres pièces telles que 123456 peuvent être acquises ensemble même avec des éléments changeants dynamiquement tels que id.
De plus, vous pouvez utiliser «le plus proche» pour obtenir l'élément DOM correspondant le plus proche de celui que vous avez obtenu.
Une utilisation fréquemment utilisée est de changer l'état des éléments cochés sur l'écran de liste à la fois avec ajax. Quelque chose comme ca.
Le fonctionnement par lots de l'écran de liste est plus facile avec ajax qu'avec le formulaire. </ b>
[name] | Récupère l'élément de l'attribut name |
---|---|
[name=value] | Obtient l'attribut dont la valeur est la valeur nommée name. Correspondance parfaite |
[name^=value] | Obtient un attribut dont la valeur nommée nom commence par valeur. Correspondance de préfixe |
[name$=value] | Obtient un attribut dont la valeur nommée name se termine par value. Match en arrière |
[name*=value] | Obtient un attribut qui a la valeur de chaîne dans la valeur nommée name. Match partiel |
[name~=value] | Obtient un attribut dans lequel les valeurs nommées name sont séparées par des espaces et une est value. |
[name|=value] | Obtient un attribut dans lequel les valeurs nommées nom sont séparées par des tirets et une est valeur |
La source: [https://code-schools.com/javascript-dom-match/:title]
Je savais qu'ajax pouvait passer des variables de JS à Ruby, mais ne pouvait-il pas être l'inverse?
Si vous pensez cela, vous pouvez le faire après tout.
manière:
Écrivez reder json:
dans le contrôleur et renvoyez les données json du côté javascript.
def get_supplier_product_code
if params.key?(:product_code)
params[:supplier_product_code] = Product.find_by(code: params[:product_code]).supplier_product_code
end
render json: {supplier_product_code: params[:supplier_product_code]}.to_json
end
render json: {supplier_product_code: params[:supplier_product_code]}.to_json
En écrivant, les données JSON peuvent être renvoyées du côté de la communication ajax.
Comment obtenir JSON
$.ajax({
url: '/suppliers/purchases/get_supplier_product_code',
type: "GET",
dataType: "json",
headers: { 'X-CSRF-Token': token },
data: { "product_code": $(this).val(), "supplier_product_code": supplier_product_code.val() },
success: function (data) {
supplier_product_code.val(data.supplier_product_code);
supplier_product_code.trigger('change');
},
error: function () {
supplier_product_code.val("");
supplier_product_code.trigger('change');
}
});
Comme je l'ai écrit ci-dessus, vous pouvez obtenir la variable JSON en faisant data.supplier_product_code
après le succès.
Après cela, vous pouvez réécrire les données du côté JS et du côté Ruby on Rails comme vous le souhaitez.
c'est tout.
Recommended Posts