2012-04-08 11 views
0

내가 드루팔 7에서 일하고 있어요에 영향을주지, 나는 형태는 새로운 코멘트를 추가하려면이Drupal.attachBehaviors 반환 아약스 양식

function qt_debate_response_form($form, &$form_state, $node_id){ 
$form['node_id'] = array(
    '#type' => 'value', 
    '#value' => $node_id, 
); 
$form['response_body'] = array(
    '#type' => 'textarea', 
    '#required' => TRUE, 
    '#row' => 4, 
    '#default_value' => '', 
); 
$form['submit'] = array(
    '#type' => 'submit', 
    '#value' => t('Post'), 
    '#ajax' => array(
     'callback' => 'qt_debate_response_form_js', 
     'wrapper' => 'response-message-' . $node_id, 
     'method' => 'append', 
     'effect' => 'fade', 
    ), 
); 
return $form; 
} 

그리고 아약스 콜백 함수처럼 제작 한

function qt_debate_response_form_js($form, $form_state) { 
global $user; 
$body_text = $form_state['values']['response_body']; 
$node_id = $form_state['values']['node_id']; 

$message_js = ' 
<script language="javascript" type="text/javascript"> 
    qt_debate_response_load_new_item(' . $node_id . ',' . $user->uid . '); 

    jQuery(".response-form-wrapper textarea").val(""); 
</script>'; 


$comment = new stdClass(); 
$comment->nid = $form_state['values']['node_id']; // Node Id the comment will attached to 
$comment->cid = 0; 
$comment->pid = 0; 
$comment->uid = $user->uid; 
$comment->is_anonymous = 0; 
$comment->homepage = ''; 
$comment->status = COMMENT_PUBLISHED; 
$comment->language = LANGUAGE_NONE; 
$comment->subject = text_summary($body_text, null, 60); 
$comment->comment_body[$comment->language][0]['value'] = $body_text; 
$comment->comment_body[$comment->language][0]['format'] = 'filtered_html'; 
comment_submit($comment); 
comment_save($comment); 

$output = $message_js; 

return $output; 
} 

여기 사업부 (아약스)에 새로운 창조 코멘트를로드 내 자바 스크립트

function qt_debate_user_post_load_new_items(debate_id) { 
// get the latest comment id in context 
$top_comment = jQuery(".view-debate-user-posts .views-row").first(); 
$top_comment_id = jQuery(".nid-field-hidden", $top_comment).html(); 

jQuery.ajax({ 
    type: "GET", 
    url: "/qt_debate/ajax/load_new_items/" + debate_id + "/" + $top_comment_id, 
    data: "", 
    success: function(html){ 
     $new_items = jQuery(".view-content", html); 
     jQuery("form", $new_items).attr("action","/debate/199"); 
     jQuery(".form-submit", $new_items).attr("id","edit-submit--5"); 

     if ($new_items.html() != null) { 
      html = '<div class="new_items_wrapper" style="display: none">' + $new_items.html() + '</div>'; 
      if (jQuery(".view-debate-user-posts .view-content").length == 0) { 
       jQuery(".view-debate-user-posts .view-empty").remove(); 
       jQuery(".view-debate-user-posts").append('<div class="view-content"></div>'); 
      } 

      jQuery(".view-debate-user-posts .view-content").prepend(html); 

      jQuery(".view-debate-user-posts .view-content .new_items_wrapper").fadeIn(500, function() { 
       jQuery(".views-row", this).unwrap(); 
       Drupal.attachBehaviors(); 
      }); 
     } 
    }, 
}); 

var t = setTimeout("qt_debate_user_post_load_new_items(" + debate_id + ")", 30000) 
} 

재입니다 hook_menu이다 jQuery를 콘텐츠 뷰가 다시

function qt_debate_ajax_load_new_items() { 
$debate_id = arg(3); 

print views_embed_view('debate_user_posts_load_new_items_', 'default', array($debate_id)); 
exit(0); 
} 

보기 템플릿 파일을 호출십시오, 나는 또한, 반환보기의 내용이 자바 스크립트에서 Drupal.attachBehaviors와 함께, 좋은 렌더링

print drupal_render(drupal_get_form('qt_debate_response_form', $row->nid)); 

내부의 다른 모든 효과를 새 양식을 반환 반환 된보기 내용에서도 잘 작동합니다. form submit ajax를 제외하고.

아무도 도와 줄 수 있습니까? attachBehaviors는 return ajax 양식과 함께 작동하지 않습니다.

감사합니다.

답변

0
Drupal.attachBehaviors(context); 

기본적

Drupal.behaviors.yourFunctionName = function(context) { 
    $('div.someSelectorclass:not(.already-processed-class)', context).addClass('already-processed-class').bind(someMethod); 
} 

의해 정의 된 함수를 다시 실행하고 이러한 방법은 선택기 [이미 처리 클래스 (바인드 여부를 테스트 할 수)를 추가한다; [또는 (function (e) {})를 클릭하십시오; 또는 각각 (function() {}); 또는 무엇이든] 이미 추가되었습니다. "컨텍스트"는 less-than 'document'를 전달하는 것입니다. 예를 들어, 새 컨텐트가 원래 비헤이비어 함수에서 여전히 발견되는 더 작은 컨텍스트에있는 것으로 알려진 경우 :이 예제에서는 my 새로운 'div.someSelectorclass'

Drupal.attachBehaviors('div.parentContainerClass'); 

대신

Drupal.attachBehaviors(document);