2008-10-21 37 views
13

Có ai đó đã nhận được plugin jquery jeditable để chạy đúng cách trong ứng dụng Rails. Nếu vậy, bạn có thể chia sẻ một số gợi ý về cách thiết lập nó? Tôi đang gặp sự cố khi tạo "gửi url".Ruby on Rails và jeditable (jquery)


IIRC, bạn không thể chỉ cần gọi mã ruby ​​từ trong javascript (vui lòng để tôi sai :-). Bạn có nghĩa là RJS ??? Đó không phải là giới hạn đối với Prototype? Tôi đang sử dụng jQuery.


UPDATE:
uh ..... hỏi này một khi trở lại và trong khi chờ đợi chuyển sang một giải pháp khác nhau. Nhưng IIRC vấn đề chính của tôi là:

Tôi đang sử dụng tài nguyên RESTful. Vì vậy, chúng ta hãy nói rằng tôi phải mô hình một blog và do đó có nguồn "bài viết". Nếu tôi muốn chỉnh sửa bài đăng (ví dụ: bài đăng có ID 8), bản cập nhật của tôi sẽ được gửi qua HTTP tới URL http://my.url.com/posts/8 với POST động từ HTTP. Tuy nhiên, URL này được xây dựng trong mã Rails của tôi. Vì vậy, làm thế nào tôi sẽ nhận được gửi url của tôi vào mã jQuery của tôi? Vì đây là mã RESTful, URL cập nhật của tôi sẽ thay đổi với mỗi bài đăng.

+0

Bạn đang gặp phải vấn đề gì với url gửi? – Codebeef

Trả lời

5

Xin lỗi vì đã mang tính năng này lên ngay bây giờ, nhưng tôi chỉ tìm thấy thời gian để xem lại mã của mình. .js trong phạm vi đường ray):

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...' 
    }) 
}); 
}); 

Công trình này hoạt động, nếu URL điều khiển của bạn là RESTful.

+3

làm cách nào để biết URL nào cần gửi? – Angela

+0

url bài đăng xảy ra giống với hành động hiển thị và các biểu mẫu mặc định cho cùng một url nếu không có gì khác được chỉ định. Sự khác biệt là trong phương pháp http, và đường ray định tuyến cho phù hợp. – DGM

0

I "m không chắc tôi hoàn toàn hiểu được những vấn đề bạn đang gặp phải, nhưng tôi nghĩ rằng bạn có thể đặt một cái gì đó như thế này trong javascript của bạn:

<%= url_for(@post) %> 

Nó phụ thuộc vào cách bạn đang cơ cấu lại javascript của bạn, làm thế nào bạn đã có các tệp của mình được sắp xếp, v.v ...

1

Nếu bạn đang bao gồm tệp .js trong html của mình thì không, nhưng nếu bạn có nội dung js trong mẫu xem thì có thể.

Bạn cũng có thể có tệp .erb.js, là chế độ xem js.

Bất cứ điều gì có thể: D

+0

Về các tệp .erb.js đó, bạn có nhớ xem bài đăng khác của tôi không? Tôi thực sự đánh giá cao nó! http://stackoverflow.com/questions/260476/rails-how-to-update-a-hasmany-through-relation-via-jquery – Sebastian

10

Dưới đây là làm thế nào tôi có dây lên JEditable (1.6.2) với ứng dụng của tôi yên tĩnh Rails (2.2.2):

Inline Mẫu:

<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' 
    } 
}); 

Bộ điều khiển:

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 
%> 

Đó là một chút thời gian với câu lệnh switch. Sẽ tốt hơn nếu JEditable chỉ lưu giá trị đã gửi theo mặc định nếu yêu cầu ajax thành công và không có gì được trả lại.

+1

Bạn có thể bỏ liên kết tuyên bố trường hợp đó và chỉ cần trả về điều này: format.js {render : text => @ email.send (params [: wants])} – jdl

0

Nếu bộ điều khiển của bạn hơi kém an toàn hơn một chút.Đặc biệt nếu bạn có một hành động để cập nhật một trường cụ thể thì điều này cũng hoạt động. Khóa đang chuyển mã thông báo xác thực.

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> 

điều khiển quá đơn giản hóa mà không biện minh cho việc không yên tĩnh:

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 

(Làm việc với Rails 2.2 .2 và 2.3.2 w/Jeditable 1.7.0 và jRails 0.4, mặc dù jRails không chơi nhiều tương tác e ngoài việc cung cấp các tính năng bao gồm cho jQuery 1.5)