render 頁面javascript調用

情景:

在使用 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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章