繁体   English   中英

Ruby on Rails和jeditable(jquery)

[英]Ruby on Rails and jeditable (jquery)

有没有人得到了jQuery插件jeditable在一个Rails应用程序正常运行。 如果是这样,你能否分享一些关于如何设置它的提示? 我在创建“submit-url”时遇到了一些麻烦。


IIRC,你不能简单地在javascript中调用ruby代码(请让我错了:-)。 你的意思是RJS ??? 这不仅限于Prototype吗? 我正在使用jQuery。


更新:
呃.....一会儿问这个问题,同时转向另一个解决方案。 但是IIRC我的主要问题如下:

我正在使用RESTful资源。 所以,假设我必须为博客建模,因此拥有资源“帖子”。 如果我想编辑帖子(例如ID为8的帖子),我的更新将通过HTTP发送到带有HTTP动词POST的URL http://my.url.com/posts/8 但是,此URL是在我的Rails代码中构建的。 那么我如何将我的submit-url放入我的jQuery代码中? 由于这是RESTful代码,因此我的更新URL将随每个帖子而变化。

以下是我使用我的Restful Rails应用程序(2.2.2)连接JEditable(1.6.2)的方法:

内联表格:

<div id="email_name"><%= h( @email.name ) %></div>

$('#email_name').editable( <%= email_path(@email).to_json %>, {
  name: 'email[name]',
  method: 'PUT',
  submitdata: {
    authenticity_token: <%= form_authenticity_token.to_json %>,
    wants: 'name'
  }
});

控制器:

def update
  @email = Email.find( params[:id] )
  @email.update_attributes!( params[:email )
  respond_to do |format|
    format.js
  end
end

update.js.erb

<%=
    case params[:wants]
    when 'name' then h( @email.name )
    # add other attributes if you have more inline forms for this model
    else ''
    end
%>

这个switch语句有点笨拙。 如果ajax请求成功并且没有返回任何内容,那么如果JEditable默认只保存提交的值,那将是很好的。

请原谅我现在才提出这个问题,但我只是找时间再次查看我的代码。 我想我通过以下javascript(我在rails中的application.js)解决了我的问题:

jQuery(document).ready(function($) {

$(".edit_textfield").each( function(i) {
  $(this).editable("update", {
         type      : 'textarea',
         rows      : 8,
         name : $(this).attr('name'),
         cancel    : 'Cancel',
         submit    : 'OK',
         indicator : "<img src='../images/spinner.gif' />",
         tooltip   : 'Double-click to edit...'
     })
 });
});

如果您的Controller URL是RESTful,这是有效的。

如果你在你的html中包含.js文件,那么没有,但是如果你的视图模板中有js inline,那么你可以。

您还可以拥有.erb.js文件,这些文件是js视图。

一切皆有可能:D

我不确定我完全理解你遇到的问题,但我认为你可以在你的javascript中加入这样的东西:

<%= url_for(@post) %>

这取决于你是如何构建你的javascript,如何组织你的文件等...

如果你的控制器比安静的少一点。 特别是如果您有更新特定字段的操作,那么这也适用。 关键是传递身份验证令牌。

index.html.erb

<span id="my_edit"><%= foo.bar %></span>

<script type="text/javascript">
  $(document).ready(function() {
    $("#my_edit").editable('<%= url_for(:action => "update_bar", 
                  :id => foo) %>',
                    {
                       method: 'PUT',
                       cancel    : 'Cancel',
                       submit    : 'OK',
                       indicator : "<img src='../images/spinner.gif' />",
                       tooltip   : 'Double-click to edit...',
                       submitdata: {
                         authenticity_token: <%= form_authenticity_token.to_json %>,
                       }
                     }
    });
</script>

过度简化的控制器不能证明不是安静的:

foo_controller.rb

def update_bar
    foo = Foo.find(params[:id])
    bar= params[:value]
            // insert justifiable code here
    foo.save
    render :text=>params[:value]
end

(使用Rails 2.2.2和2.3.2 w / Jeditable 1.7.0和jRails 0.4,虽然除了为jQuery 1.5提供包含之外,jRails在这里没有太多的交互)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM