render 页面javascript调用

本文探讨了在Rails应用中使用auto_complete_field功能时遇到的问题:当返回页面包含JavaScript脚本时,这些脚本无法正常工作。提供了一种解决方案,即通过自定义方法避免JavaScript标签直接返回,而是通过javascript_function输出。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

情景:

在使用 rail 中的 自动完成功能 auto_complete_field时,假若返回的页面中有 javascript脚本,那它将不会被返回。 必需把它用 javascript_function 方法进行改写。
a.rhtml 中 render _b.rhtml 页面。 在_b.rhtml中如果包含了 javascript脚本,则不能被render到a.rhtml中。



我在_b.rhtml中用了auto_complete_field来对用户输入进去提示。因为auto_complete_result 返回的已经是javascript脚本了,就不能把javascript发送给客户端。


解决方法:

在application_helper.rb中覆盖此方法:不返回javascript脚本,把结果放到_b.rhtml中 用javascript_function方法把脚本输出到客户端。

def auto_complete_field_no_javascript_tag(field_id, options = {})
function = "var #{field_id}_auto_completer = new Ajax.Autocompleter("
function << "'#{field_id}', "
function << "'" + (options[:update] || "#{field_id}_auto_complete") + "', "
function << "'#{url_for(options[:url])}'"

js_options = {}
js_options[:tokens] = array_or_string_for_javascript(options[:tokens]) if options[:tokens]
js_options[:callback] = "function(element, value) { return #{options[:with]} }" if options[:with]
js_options[:indicator] = "'#{options[:indicator]}'" if options[:indicator]
js_options[:select] = "'#{options[:select]}'" if options[:select]
js_options[:paramName] = "'#{options[:param_name]}'" if options[:param_name]
js_options[:frequency] = "#{options[:frequency]}" if options[:frequency]

{ :after_update_element => :afterUpdateElement,
:on_show => :onShow, :on_hide => :onHide, :min_chars => :minChars }.each do |k,v|
js_options[v] = options[k] if options[k]
end

function << (', ' + options_for_javascript(js_options) + ')')

function
end

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值