2014-01-24 5 views
0

У меня есть подчиненная форма, которую я получаю через ajax и добавляю к своей основной форме. На стороне сервера я обертываю субформ в наборе полей с помощью «сворачиваемых» и «свернутых» классов, drupal_render массива и передает его обратно в json (SOP). На веб-интерфейсе, я могу получить складную поведение, используя следующий код:Каков правильный способ инициализации поведения коллапса drupal

jQuery('#my-fieldset legend span').click(function(){ 
Drupal.toggleFieldset(jQuery('#my-fieldset')); 
}); 

Это работает, но это не похоже на правильный путь, чтобы сделать это. Я попытался крепление поведения, используя этот код:

Drupal.behaviors.collapse.attach(jQuery('#my-fieldset'), Drupal.settings); 

и

Drupal.behaviors.collapse.attach(jQuery('#my-fieldset')); 

но ни правильно применять поведение.

Итак, как правильно инициализировать это поведение вручную?

ТИА

Я думаю, что у меня есть это:

Drupal.behaviors.collapse.attach(jQuery(document), Drupal.settings); 

РЕШЕНИЕ

БЛАГОДАРЯ prabeen гири! Drupal.attachBehaviors имеет смысл ...

Я проверил с drupal.attachBehaviors(), но, возможно, я не использовал его правильно. Я думаю, что я передавал объект jquery как контекст, а не только селектор, как видно из приведенного вами примера, если это имеет значение. Я еще поиграю с ним.

я не был знаком с методом загрузки(), который является хорошей стенографией для моего традиционного подхода ...

jQuery.ajax({ 
    url: Drupal.settings.basePath + url, 
    type: 'POST', 
    data: data, 
    dataType: 'json', 
    success: function(response){ 
     if (response.status != undefined && response.data != undefined && response.status == 'ok') { 
     callback(response.data); 
     } 
     return false; 
    } 
    }); 

Спасибо за понимание. Очень полезно.

(я upvote вас, но у меня нет респ)

ответ

0

Drupal.attachBehaviors() путь вручную присоединять поведения в Drupal7

Вы можете увидеть здесь https://drupal.org/node/1143768 для справки.

Обновления

AttachBehaviours вызывается, завершение любого AJAX запроса. Поэтому reinvokes на все, Thats внутри

Drupal.behaviours.myModule = { 
    attach : { 
    // your code here 
    // Code here will get executed on page load and every ajax request 

     new Drupal.MyMenuList() // this will attache events and handles it 
    } 
} 

Допустим, вы используете какой-то конструктор объекта приложить события, обрабатывать события и другие материалы, как

Drupal.MyMenuList = function() { 
    $('#asdf').click(function() { 
    // 
    }); 
} 
Drupal.MyMenuList.prototype.click = function(){ 
    // event handler 
} 

Если вы не хотите использовать выше приложите поведение, то вы можете использовать Drupal.attachBehaviours(new Drupal.MyMenuList()) для повторного применения такого же поведения.

Смежные вопросы