【问题标题】:render a partial from jquery and haml从 jquery 和 haml 渲染一个部分
【发布时间】:2010-08-05 15:41:40
【问题描述】:

我计划做的功能是根据从选择标签中选择的数字插入一些表单元素。

我有一个名为 number_of_passengers 的选择标签,我计划为所选号码动态附加新的乘客字段。假设我从 number_of_passengers 中选择 2,那么 2 个表单应该出现在字段集中。这些表格包含姓名、年龄体重等。

我尝试过这样做:

call a rails function from jquery?

只是将它转换为haml-speak,但每当我使用 :javascript 标签时都会出错。此外,我认为一旦我进入其中,我就无法“逃脱”javascript标签

:javascript
  $('#number_of_passengers').change(function() {
    var $num_of_passengers = $(this).val();
    for($i=0; $i<$num_of_passengers;$i++) {
      $('.passenger-info ul').append('<%= escape_javascript( render :partial => "new_passenger", :locals => {:booking => @booking }) %>');
    }
  })

由于我在 form_for 中,如何将 @booking 变量传递给本地?它看起来真的很复杂,我打算做一些肮脏的方式,而不是只循环 20 次(最多 20 名乘客),然后根据所选的数字隐藏/显示它们。但是你不觉得这太脏了吗?

【问题讨论】:

    标签: jquery ruby-on-rails haml renderpartial


    【解决方案1】:

    要使插值工作,您需要执行类似的操作

    != "$('.passenger-info ul').append('#{escape_javascript( render :partial => 'new_passenger', :locals => {:booking => @booking })}');
    

    这么简单的说:将!=添加到行首,并在双引号之间包含字符串。

    您关于@booking 的问题:我建议您调查一些嵌套表单示例以使您更清楚(例如thisthis railscast)。

    【讨论】:

    • 嗯,谢谢! != 是什么意思?我现在只是将其加入书签并在将来检查,因为我只是使用了硬编码的 js(手动插入了 html 表单......虽然很脏,但它可以工作)。不过很快就会重构
    • != 表示不转义 HTML,因此它将按原样插入 ruby​​ 字符串,而不转义它。与普通的 = 相反,它评估和转义字符串,以便安全地包含在 HTML 中。更多信息:haml-lang.com/docs/yardoc/…
    • 更简单...使用 :plain 过滤器(不是 :javascript)。
    • 前导“有必要吗?
    【解决方案2】:

    我实际上是通过添加:

    respond_to do |format|
      format.js { render :partial => "new_passenger" }
    end
    

    所以即使请求是在 js 中,它也会返回一个 html 部分。漂亮

    【讨论】:

    • 你试过我的答案吗?如果不清楚:您在 haml 中使用了 erb 样式的插值。但很高兴你发现了一些有用的东西。
    • 我试图理解你在这里所做的事情,也有兴趣根据 javascript 条件中的内容呈现一些 HTML。 “new_passenger”在哪里?还有你的回答;你把这段代码放在哪里了?
    • new_passenger 与控制器存在于同一个视图文件夹中,所以在我的例子中,bookingscontroller 调用了它,所以它在 app/views/bookings 中
    【解决方案3】:

    Rails 语法一直在变化,但不应该这样

    render :partial => "new_passenger", :locals {:booking => @booking })
    

    成为

    render :partial => "new_passenger", :locals => {:booking => @booking })
    

    您可以在 javascript 块中转义 javascript,因为您正在评估 ruby​​ 标记。

    您收到了哪些错误消息?

    我不清楚你问题的后半部分,但这就是你要找的:

    - form_for @user do |f|
      # f.object is equal to @user
    

    【讨论】:

    • 您好,感谢您的回复。我因病戒烟了。无论如何,我已经修正了错字,但我仍然很难过。我稍后会编辑问题并向您展示问题
    猜你喜欢
    • 1970-01-01
    • 2011-12-31
    • 2011-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-06
    • 2011-04-27
    相关资源
    最近更新 更多