2011-07-04 20 views
10

Các dòng mã sau đây:Rắc rối chèn một đường ray một phần sử dụng JQuery

$("#comments_<%[email protected] %>").append("<%= escape_javascript(render :partial => 'posts/comment', :locals => { :comment => @comment }) %>"); 

là phải instert một phần như html bên trong thẻ coments_xx div. những gì đang xảy ra là nội dung của phần được chèn nhưng không được hiểu là html, ý tôi là, thay vì chèn nhận xét với định dạng đúng, tôi thấy toàn bộ mã trong trang web:

Ví dụ (đây là cách nó chèn nó vào trang web):

1 Comment 
<div id=comment_5_34> <span class=dateandoptions> Posted less than a minute ago<br/> 
<a href=/comments/34/5 data-method=post data-remote=true rel=nofollow>Deletea> span> 
<p><b>otra pruebab> wrote:p> <br/> <p><b> Webpage:b>asss.comp> <br/> <p class=comment-body>heeyeyeyyhep>div> 

Thanks for commenting! 

Nếu tôi analize mã javascript chèn tôi nhận được một cái gì đó như thế này (i sử dụng phần mở rộng firebug để xem nó):

/* Add the new comment to the bottom of the comments list */ 
$("#comments_5").append("&lt;div id=comment_5_34&gt; &lt;span class=dateandoptions&gt;  Posted less than a minute ago&lt;br/&gt;  &lt;a href=/comments/34/5 data-method=post data-remote=true rel=nofollow&gt;Deletea&gt; span&gt; &lt;p&gt;&lt;b&gt;otra pruebab&gt; wrote:p&gt; &lt;br/&gt;  &lt;p&gt;&lt;b&gt; Webpage:b&gt;asss.comp&gt;  &lt;br/&gt; &lt;p class=comment-body&gt;heeyeyeyyhep&gt;div&gt;"); 

Cuối cùng đây là quy tắc ứng phần mà tôi đang chèn:

<div id="comment_<%=comment.post.id%>_<%=comment.id%>"> 
<span class="dateandoptions"> 
    Posted <%= time_ago_in_words(comment.created_at) %> ago<br/> 
    <%= link_to 'Delete', {:controller => 'comments', :action => 'eliminar', :id => comment.id, :post_id => comment.post.id}, :method => :post, :remote => true %> 
</span> 
<p><b><%= comment.user_name %></b> wrote:</p> 
<br/> 
<% if comment.web_page != nil %> <p><b> Webpage:</b><%= comment.web_page %></p> <% end %> 
<br/> 
<%= content_tag(:p, comment.contenido, :class => "comment-body") %> 
</div> 

Hy vọng tôi có thể giải thích cho bản thân mình!

cảm ơn trước sự giúp đỡ của bạn.

Trả lời

3

Tôi đã gặp sự cố tương tự cách đây vài ngày. Dường như bạn đang chạy afoul của Rails làm cho đầu ra HTML an toàn.

Hãy thử thêm .html_safe đến cuối của escape_javascript:

<%= escape_javascript(render :partial => 'posts/comment', :locals => { :comment => @comment }).html_safe %> 

Tôi hiện không có khả năng để kiểm tra, nhưng nếu điều này là do cùng một loại vấn đề mà tôi đã nó nên làm việc cho bạn .

0

Tôi đã thử giải pháp SaucyK và có vẻ như là cách để đi, nhưng tôi vẫn có một đầu ra lạ được hiển thị trong trình duyệt của mình.

Vì vậy, bây giờ là dòng mã đi (như SaucyK đề xuất):

$("#comments_<%[email protected] %>").append("<%= escape_javascript(render :partial => 'posts/comment', :locals => { :comment => @comment }).html_safe %>"); 

Và đây là những gì tôi nhận được bây giờ trong trình duyệt của tôi:

Posted less than a minute ago 
Deletea> span> 

diego probandob> wrote:p> 

Webpage:b>www.toteria.comp> 

pruebaaaap>div> 

Nếu tôi nhìn vào đoạn code html thức được tạo bởi rails và Jquery Tôi nhận được điều này:

<div style="" id="comment_5_40"> 
<span class="dateandoptions">  Posted less than a minute ago<br>  <a href="/comments/40/5" data-method="post" data-remote="true" rel="nofollow">Deletea&gt; span&gt; <p><b>diego probandob&gt; wrote:p&gt; <br>  </b></p><p><b><b> Webpage:b&gt;www.toteria.comp&gt;  <br> </b></b></p><p class="comment-body"><b><b>pruebaaaap&gt;div&gt;</b></b></p></a></span></div></div> 

và nhận xét tôi đã viết là

diego probando wrote: 

Webpage:www.toteria.com 

pruebaaaa 

Khi tôi làm mới trang web (vì vậy giao diện được giới thiệu qua đường ray chứ không phải thông qua Javascript) mọi thứ đều ổn.

Vì vậy, như bạn có thể thấy ở đầu mã được diễn giải một cách nghiêm ngặt nhưng sau đó có một số nơi thay vì nhận được 'Tôi nhận được > hoặc thay vì nhận được b >.

Có thể liên quan đến phương thức escape_javascript ?? tôi hiểu nó là cần thiết anyway nếu tôi không muốn javascript để thử giải thích mã ruby ​​của tôi ..

Mã của phần tôi đang chèn vẫn giống như trong bài đăng đầu tiên !.

Cảm ơn câu trả lời của bạn, xin lỗi tôi phải trả lời lý do này nhưng tôi đã không được đăng ký trong stackoverflow khi tôi đã viết câu hỏi.

6

Tôi đã tìm ra giải pháp !! Chỉ cần có mã đường ray bên trong # {}:

$("#comments_<%[email protected] %>").append("<%= escape_javascript("#{render :partial => 'posts/comment', :locals => { :comment => @comment }}").html_safe %>"); 
+1

Tôi vẫn đang nhận được phương pháp chưa xác định hiển thị khi tôi thực hiện theo đề xuất này. Ví dụ của tôi khá giống nhau. Bạn sẽ có một ý tưởng về những gì tôi có thể bị mất tích? Sự khác biệt duy nhất giữa câu trả lời của bạn ở đây và những gì tôi có là mô hình và một phần tên. –

+0

Ngoài ra, lý do tôi đang thử phương pháp này là bởi vì tôi có một danh sách các partials mà tôi tạo bằng cách sử dụng một ruby ​​nhúng mỗi vòng lặp trên các mục hiện tại. Mục tiêu của tôi là nối thêm một đối tượng mới được tạo khi gửi đến danh sách hiện tại mà không cần tải lại trang. Bạn có biết nếu có một cách để làm mới ruby ​​cụ thể mỗi vòng lặp? Điều đó có lẽ sẽ yêu cầu một cuộc gọi ajax, nhưng tôi đã thấy nó sẽ dễ dàng để làm một cái gì đó như thế này: '$ (" # activeTab "). Append (" <% = escape_javascript ("# {render: partial => 'groups/thing -list-row ',: locals => {: t => Thing.order (: created_at) .last}} ")%>"); ' –

+0

Để tham khảo trong tương lai của những người tìm kiếm chủ đề này tìm câu trả lời: một lý do phổ biến để nhận được "phương thức không xác định" khi kết xuất là bạn đang sử dụng hiển thị trong một tệp bên trong/nội dung chứ không phải ứng dụng/chế độ xem. – Steve

Các vấn đề liên quan