2007-06-21

关于In Place Editing with RJS

关键字: RoR实践
最近在用RoR实现自己曾经做过的一个项目,发现事件过程中有很多乱七八糟的问题。
今天就花了一个上午的时间才搞清楚了这样一个功能。
我想让In Place Editing 调用完后台数据库后去render一个rjs。
一开始不知道默认In Place Editing 在Ajax调用完后,会使用返回的值去更新
原始<span>中的内容,
结果就发现原来显示值地方把握要render的rjs的javascript代码给打印出来了。
效果如下
try { Element.show("roll_products_list"); } catch (e) { alert('RJS error:\n\n' + e.toString()); alert('Element.show(\"roll_products_list\");'); throw e } 

后来看了In Place Editing with RJS一文才知道需要加上一个参数
:evalScripts=>true,就不会直接显示javascript脚本,而是直接运行javascript脚本了。
代码如下
  def editable_content(options)
    options[:content] = { :element => 'span' }.merge(options[:content])
    options[:ajax] = { 
    :evalScripts=>true,:okText => "'Save'", 
    :cancelText => "'Cancel'",:submitOnBlur => true,
    :okButton => false,:cancelLink => false,
    :highlightcolor=>"''"}.merge(options[:ajax] || {})
    script = Array.new
    script << "new Ajax.InPlaceEditor("
    script << "  '#{options[:content][:options][:id]}',"
    script << "  '#{options[:url]}?_method=put',"
    script << "  {"
    script << options[:ajax].map{ |key, value| "#{key.to_s}: #{value}" }.join(", ")
    script << "  }"
    script << ")"
    content_tag(
                options[:content][:element],
                h(options[:content][:text]),
                options[:content][:options]
    ) + javascript_tag( script.join("\n") )
  end
评论
发表评论

您还没有登录,请登录后发表评论

myoldman
  • 浏览: 7967 次
  • 性别: Icon_minigender_1
  • 来自: 福建福州
  • 详细资料
搜索本博客
存档
最新评论