2008-10-21 111 views
13

有沒有人得到jquery插件jeditable在Rails應用程序中正常運行。如果是這樣,你能分享一些關於如何設置它的提示嗎?我在創建「submit-url」時遇到了一些麻煩。Ruby on Rails和jeditable(jquery)


IIRC,你不能簡單地從javascript內調用ruby代碼(請讓我錯了:-)。你的意思是RJS?是不是隻限於原型?我正在使用jQuery。


UPDATE:
呃.....問這個而回,並在其間切換到不同的解決方案。但IIRC我的主要問題如下:

我正在使用RESTful資源。因此,假設我必須建模一個博客,並因此擁有資源「帖子」。如果我想編輯帖子(例如ID爲8的帖子),我的更新將通過HTTP發送到帶有HTTP動詞POST的URL http://my.url.com/posts/8。但是,這個URL是在我的Rails代碼中構建的。那麼,如何將我的submit-url加入我的jQuery代碼?由於這是RESTful代碼,我的更新URL將隨着每篇文章而改變。

+0

你提交url有什麼問題? – Codebeef 2008-10-30 12:45:12

回答

5

對不起,因爲現在只提出這個,但我只是找到了時間來再次查看我的代碼。我想我解決了我的問題通過以下JavaScript(我的應用程序.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,則可以使用。

+3

它如何知道要提交的URL? – Angela 2010-10-25 00:33:30

+0

post url恰好與show動作相同,並且如果沒有指定其他內容,則將默認形式設置爲相同的url。區別在於http方法,並且rails會相應地路由它。 – DGM 2011-12-16 03:10:10

0

我「米不知道我完全理解你所遇到的問題,但我認爲你可以把這樣的事情在你的JavaScript:

<%= url_for(@post) %> 

這取決於你是如何構建你的JavaScript,如何你有你的文件組織等...

1

如果你在html中包含.js文件,那麼不需要,但是如果你的視圖模板中有js內聯,那麼你可以。

您還可以擁有.erb.js文件,它們是js視圖。

一切皆有可能:d

+0

關於這些.erb.js文件,你介意看看我的另一篇文章嗎?我真的很感激它! http://stackoverflow.com/questions/260476/rails-how-to-update-a-hasmany-through-relation-via-jquery – Sebastian 2008-11-04 10:40:28

10

這裏是我如何連接起來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 

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語句。如果JEditable會成功保存提交的值,並且沒有返回任何內容,那將會很好。

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 

(工程使用Rails 2.2 .2和2.3.2 w/Jeditable 1.7.0和jRails 0.4,儘管jRails並沒有發揮太多的互動作用e除了提供包含jQuery 1.5)