Динамическое имя, основанное на модели в jquery

0

Я следую railscasts для jcrop, но задавался вопросом, как мне получить динамическое имя модели в jquery, если у меня есть что-то вроде этого:

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 основан на модели пользователя, но он был жестко закодирован, но если у меня есть другие модели с обрезкой, как вы делаете id динамическим на основе модели?

благодаря

  • 0
    Это просто строка, нет? Получить имя модели в виде строки?
  • 0
    @SergioTulentsev спасибо за ответ. Я все еще новичок в рельсах, я не уверен, как именно я могу дианмически назвать имя модели, поэтому, если я нахожусь в NewModel , он сгенерирует new_model_crop_x и т. Д.
Показать ещё 3 комментария
Теги:
coffeescript
jcrop

2 ответа

1
Лучший ответ

andrewliu. Я не отношусь к динамической модели. Я говорю о том, как использовать другое имя модели для использования 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)

#user_crop_x происходит из этой формы:

= 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'

Он по умолчанию генерирует много id в скрытом поле в rails form_for. Также как #user_crop_x и #user_crop_y и так далее.

Идентификатор по умолчанию - это определенное правило, которое является ##{model_name}_{attribute_name}, поэтому, если у вас есть dynamic model и лучшим способом является имя класса в скрытом поле. Пример:

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

И установите код jQuery следующим образом:

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)
  • 0
    ааа, ладно, вот какой ответ я искал. Спасибо!
0

Если ваш coffeescript отображается динамически (т.е. В файле view.js.erb), вы можете просто использовать общую переменную следующим образом:

users_controller: назначить общую переменную, которую вы можете использовать в своем представлении, например:

@user_name = User.find(1).name

Посмотреть

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)
  • 0
    мой файл coffeescript находится в app/assets/javascripts есть ли метод, который я могу создать или помощник, а затем вызвать его в файл js?
  • 0
    невозможно, потому что весь JavaScript выполняется на стороне клиента. Любые помощники вида, методы модели или шаблоны в рельсах обрабатываются на стороне сервера. Если вы действительно хотите сделать переменные ruby доступными в ваших файлах javascript, я бы предложил использовать гем под названием paloma, который позволит вам это сделать.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню