13

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


IIRC,您不能简单地从 javascript 中调用 ruby​​ 代码(请让我错了:-)。你是说RJ吗???这不限于原型吗?我正在使用 jQuery。


更新:
呃.....不久前问过这个问题,同时切换到不同的解决方案。但 IIRC 我的主要问题如下:

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

4

5 回答 5

9

以下是我如何将 JEditable (1.6.2) 与我宁静的 Rails 应用程序 (2.2.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

更新.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 默认只保存提交的值,那就太好了。

于 2009-02-15T18:52:09.453 回答
5

请原谅我现在才提出这个问题,但我刚刚找到时间再次查看我的代码。我想我通过以下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...'
     })
 });
});

如果您的控制器 URL 是 RESTful,则此方法有效。

于 2008-11-03T20:07:19.960 回答
1

如果您在 html 中包含 .js 文件,则不能,但如果您的视图模板中有 js 内联,则可以。

您还可以拥有 .erb.js 文件,即 js 视图。

一切皆有可能:D

于 2008-11-03T20:21:51.630 回答
0

我不确定我是否完全理解您遇到的问题,但我认为您可以在您的 javascript 中添加这样的内容:

<%= url_for(@post) %>

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

于 2008-11-03T16:32:37.973 回答
0

如果您是控制器,则不那么安宁。特别是如果您有更新特定字段的操作,那么这也可以。密钥正在传递身份验证令牌。

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

(与带有 Jeditable 1.7.0 和 jRails 0.4 的 Rails 2.2.2 和 2.3.2 一起使用,尽管 jRails 除了为 jQuery 1.5 提供包含之外并没有在这里进行太多交互)

于 2009-05-19T04:28:14.843 回答