Question

je suis Railscasts pour JCrop Mais je me demandais comment puis-je avoir un nom de modèle dynamique dans jQuery si j'ai quelque chose comme ceci:

update: (coords) =>
  $('#user_crop_x').val(coords.x)
  $('#user_crop_y').val(coords.y)
  $('#user_crop_w').val(coords.w)
  $('#user_crop_h').val(coords.h)
  @updatePreview(coords)

#user est basé sur le modèle de l'utilisateur, mais il a été codé en dur, mais si j'ai d'autres modèles avec des recadrage, comment rendre la dynamique ID basée sur le modèle?

Merci

Était-ce utile?

La solution

Andrewliu. Je ne veux pas que le modèle dynamique ne signifie pas. Je parle de la façon d'utiliser un autre nom de modèle pour utiliser JCROP.

update: (coords) =>
  $('#user_crop_x').val(coords.x)
  $('#user_crop_y').val(coords.y)
  $('#user_crop_w').val(coords.w)
  $('#user_crop_h').val(coords.h)
  @updatePreview(coords)

La #user_crop_x vient de cette forme:

= form_for MODEL, url: CROP_URL, method: :patch, html:{id: "jcrop_form"} do |f|
  - %w[x y w h].each do |attribute|
    = f.hidden_field "crop_#{attribute}"
  .form-actions
    = f.submit t(".crop"), class: 'btn btn-primary'

Il générera par défaut de nombreux identifiants dans le Hidden_field dans Rails form_for. Juste comme #user_crop_x et #user_crop_y etc.

L'ID par défaut est une certaine règle ce qui est ##{model_name}_{attribute_name}, donc si tu as dynamic model Et la meilleure façon est de définir le nom de classe dans le HIDDEN_FIELD. Exemple:

= f.hidden_field "crop_#{attribute}", class: "crop_class_#{attribute}"

Et définissez le code jQuery comme:

update: (coords) =>
  $('.crop_class_x').val(coords.x)
  $('.crop_class_y').val(coords.y)
  $('.crop_class_w').val(coords.w)
  $('.crop_class_h').val(coords.h)
  @updatePreview(coords)

Autres conseils

Si votre CoffeeScript est rendu dynamiquement (c'est-à-dire dans un fichier View.js.erb), vous pouvez simplement utiliser une variable partagée comme tel:

Users_Controller:Attribuez une variable partagée que vous pouvez utiliser dans votre vue, par exemple:

@user_name = User.find(1).name

voir

update: (coords) =>
  $('#<%= @user_name %>_crop_x').val(coords.x)
  $('#<%= @user_name %>_crop_y').val(coords.y)
  $('#<%= @user_name %>_crop_w').val(coords.w)
  $('#<%= @user_name %>_crop_h').val(coords.h)
  @updatePreview(coords)
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top