2010-02-09 23 views
9

Im tò mò về cách tốt nhất để tải một phần ray với jquery. Cho đến nay tôi đã thử giải pháp không hoạt động:tải một phần với jquery và đường ray

$('#imagecontent').load('/newsletters/_image_gallery.html.erb', function() { 
alert('Load was performed.'); 
}); 

Giải pháp tốt nhất để tạo hành động và/hoặc bộ điều khiển riêng biệt cho điều này và thiết lập tuyến đường? Tôi yêu cầu bởi vì làm cho giải pháp đầu tiên có vẻ dễ dàng hơn, có lẽ không quá yên tĩnh.

Cảm ơn.

+0

cũng giống như một ghi chú, bạn không thể sử dụng .html() để load bạn partials một trong hai. Ngay cả khi bạn đang gọi nó với mã ruby. Điều này là bởi vì nó ám toàn bộ hình thức ở giữa dấu ngoặc kép và làm rối tung mọi thứ. Tôi sẽ đề nghị một cách khác nếu tôi biết một, mặc dù đó là những gì tôi đang tìm kiếm bản thân mình. –

Trả lời

8

Bạn không thể truy cập tệp Mẫu (.erb) từ các yêu cầu HTTP, đây là hành động rất xấu. Tôi đề nghị bạn đặt chúng bên ngoài đường dẫn máy chủ web của bạn và truy cập chúng thông qua ứng dụng của bạn.

Tôi không chắc chắn về Rails, nhưng tôi cho rằng bạn cần phải tạo một bộ điều khiển riêng biệt (hoặc bất kỳ điều gì) để làm điều này.

EDIT điều này là do tệp .erb là tệp Ruby được nhúng và nếu bạn cố gắng yêu cầu, bạn sẽ nhận được tất cả dữ liệu không mong muốn, như <%= page_title %> mà bạn không muốn hiển thị cho người dùng. Vì vậy, bạn cần phải chuyển các tệp .erb này thông qua ứng dụng Rails của bạn để chúng được diễn giải đúng cách thành HTML.

+0

ok - cảm ơn vì sự thấu hiểu. Tôi sẽ cấu trúc nó cho phù hợp. – Christian

3

Lý do mã không hoạt động là đường ray không hiển thị tệp xem bên ngoài. Để đạt được điều bạn muốn, bạn sẽ cần một hành động mà sẽ làm cho phần này:

def image_gallery 
    render :partial => "image_gallery" 
end 

Cũng có một plugin gọi jRails thay thế những người giúp đỡ ajax tiêu chuẩn (mà sử dụng nguyên mẫu) với những người thân jquery theo định hướng tương đương. Trong trường hợp của bạn, bạn sẽ sử dụng một cái gì đó như

<%= remote_function(:update => "imagecontent", :url => "/newsletters/image_gallery") %> 

Và thậm chí nhiều hơn, trong Rails 3 bạn sẽ không cần đến. Xem this link.

+0

cảm ơn - Tôi rất mong được thấy tất cả nội dung mới trong Rails 3. – Christian

3

Với đường ray 3 bạn có thể làm ...

khiển

@content = '/some/partial' 

xem - hoặc haml.erb (html.erb) hoặc js.erb

$('#myDiv').html("<%= escape_javascript render @content %>"); 

Bạn có thể thử này nếu đường ray 2 (chỉ có mẫu sẵn trừ khi noConflict gia tăng) ...

Trong bộ điều khiển

@content = render :partial=>"https://stackoverflow.com/users/cool_partial" 

Gọi js của bạn

myFunction(#{@content.to_json}) 

Chức năng của bạn ...

myFunction = function(content){ 

    $("myDiv").html(content); 

} 

Tôi đồng ý với neutrino rằng điều này có thể được xử lý tốt hơn thông qua một hành động.

def get_partial 
    render 'some/partial' 
end 

Hope this helps

3

Một thay thế:

$('#imagecontent').html('<%= escape_javascript render 'newsletters/image_gallery' %>'); 
Các vấn đề liên quan