浏览 1936 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2008-12-24
最后修改:2008-12-24
不知道本身这个插件有没有这个功能。没找到。知道的望告诉一下 那么,我们就把提示放进内容中吧。 我用的代码比较HARD,以后再更新,先能用。 打开jrails_in_place_macros_helper.rb 在plugins里,这个是helper的东西。 看到in_place_editor_field方法。也就是平时我们用在页面中的方法: 其中 tag.to_content_tag(tag_options.delete(:tag), tag_options) + in_place_editor(tag_options[:id], in_place_editor_options) 假设我们用的是模型pair, 字段name,在页面得到是: <span class="in_place_editor_field" id="pair_name_1_in_place_editor">或许只是传说</span><script type="text/javascript"> //<![CDATA[ $('#pair_name_1_in_place_editor').editInPlace({update_value:'value', url:'/admin/lovetrees/set_pair_name/1'}) //]]> </script> 其中span里的是tag.to_content_tag得到的。javascript是后面in_place_editor得到了。我们想把提示加入到内容中,就应该得到: <span class="in_place_editor_field" id="pair_name_1_in_place_editor">或许只是传说(点击编辑)</span> 大概这样的效果。 也就是说应该是需要改动tag.to_content_tag部分。这个方法到底什么用的。我们看看API: # File actionpack/lib/action_view/helpers/form_helper.rb, line 624 def to_content_tag(tag_name, options = {}) content_tag(tag_name, value(object), options) end 哦。明白了。其中value(object)就是输出pair.name的值。那我们需要改动to_content_tag。但是我们不知道其他还有什么地方用到了。那就只改tag的这个方法吧。于是。我们在in_place_editor_field中这样改: def in_place_editor_field(object, method, tag_options = {}, in_place_editor_options = {}) tag = ::ActionView::Helpers::InstanceTag.new(object, method, self) # def tag.to_content_tag(tag_name, str="", options = {}) content_tag(tag_name, value(object) + str, options) end # #etc.. tag.to_content_tag(tag_options.delete(:tag), content_tag(:span, "(点击编辑)", :class => "notice"), tag_options) + in_place_editor(tag_options[;id], in_place_editor_options) end OK,重启一下,原来的“或许只是传说”变成了“或许只是传说(点击编辑)”并且你点这个提示,就会出现编辑效果了。 --- 但是问题出来了! 当我们点击这个提示时,输入框里面的内容也多了这个提示内容! 追寻一下原因。这就不是rails的事儿了。是js的事儿了。 打开public/jquery_inplac.pack.js,不用去改plugins里面的js(以前博客修改eip中文提示提到过) 这个文件压缩过。就不细谈了。找到对应页面的输出内容: '<input type="text" name="inplace_value" class="inplace.field" value="' + jQuery(this).text().trim().escape_html() + '"/>' 里面的jQuery(this).text().trim().escape_html()就是从原来的页面获取的内容。也就是说这一段代码得到了“或许只是传说(点击编辑)”而不是我们本来想要的“或许只是传说”。 好吧。既然是HARD CODE。那就直接替换掉。 '<input type="text" name="inplace_value" class="inplace.field" value="' + jQuery(this).text().trim().escape_html().escape_html().replace('(点击编辑)', '') + '"/>' 好了,当我们再看页面的时候,点击内容,提示就不会再出现在编辑框重了。对应的textarea也是同样的改发。 或许认为事情结束了。然后打开有select(EIP)的页面。发现当当点击编辑的时候,不能得到原始值了。比如,我们本来选择“心情”用EIP的SELECT,当点击编辑时,SELECT应该指到我选择的心情,但是现在给的是默认的“选择。。” 当然,还是修改public/jquery_inplac.pack.js。由于压缩过后用了很多变量来替代,select的代码很复杂。但是我们不难发现其中有句: 引用 var K=N==H?'selected="selected"': #etc
太明显不过了。再找找N H分别是什么。发现了代码:H=jQuery(this).html()也就是得到EIP之前的内容。 这就简单了。修改H? nono,这一改全乱了。我们只修改SELECT当中的,改成: var K=N==jQuery(this).text().trim().escape_html().replace('(点击编辑)','')?'selected="selected"': #etc 好了,虽然HARD但是能用就OK了。 下次有时间改的通用些。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |