【问题标题】:Dynamic id name based on model in jqueryjquery中基于模型的动态id名称
【发布时间】:2013-11-18 16:13:06
【问题描述】:

我正在关注railscasts for 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动态?

谢谢

【问题讨论】:

  • 只是一个字符串,不是吗?获取模型名称作为字符串?
  • @SergioTulentsev 感谢您的回复。我还是 Rails 的新手,我不确定如何动态调用模型名称,所以如果我在 NewModel,它将生成 new_model_crop_x,依此类推
  • @sawa 请详细说明?这对我没有帮助。
  • @andrewliu:好吧,我不知道jcrop,所以我在这里没有答案。
  • 这个咖啡脚本在哪里?

标签: jquery ruby-on-rails ruby coffeescript jcrop


【解决方案1】:

安德鲁柳。我不知道动态模型是什么意思。我讲如何使用另一个模型名称来使用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'

它会默认在 rails 的 form_for 的 hidden_​​field 中生成许多 id。就像#user_crop_x#user_crop_y 等等。

默认id是一定的规则##{model_name}_{attribute_name},所以如果你有dynamic model,最好的方法是在hidden_​​field中设置类名。示例:

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

【讨论】:

  • 啊,好吧,这就是我想要的答案。谢谢!
【解决方案2】:

如果您的咖啡脚本是动态呈现的(即在 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)

【讨论】:

  • 我的咖啡脚本文件在app/assets/javascripts 有没有我可以创建的方法或助手然后在js文件中调用它?
  • 不可能,因为 javascript 都是在客户端执行的。 rails 中的任何视图助手、模型方法或模板都在服务器端进行处理。如果你真的想让 ruby​​ 变量在你的 javascript 文件中可用,我建议使用一个名为 paloma 的 gem,它可以让你这样做。
猜你喜欢
  • 2020-05-18
  • 2014-02-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多