MooTools Fx.Slide, выбрасывающий this.element, является нулем - PullRequest
0 голосов
/ 05 марта 2010

Следующий код выдает ошибку «this.element is null». Однако wid_cont определенно захватывает элемент.

window.addEvent('domready',function(){
 var min = $(document.body).getElements('a.widget_minimize');
 min.addEvent('click',
  function(event){
   event.stop();
   //var box = ;
   var wid_cont = ($(this).getParents('.widget_box').getElement('.widget_box_content_cont'));
   var myVerticalSlide = new Fx.Slide(wid_cont);
   myVerticalSlide.slideOut();
  }
 );
});

Это moo tools 1.2.4 и включенный fx.slide ....

1 Ответ

1 голос
/ 08 марта 2010

он возвращает не один элемент, а массив из-за getParents() и возможных других аналогично размеченных элементов, Fx.Slide требует, чтобы вы передали ему один элемент.

здесь он хотя бы частично работает при передаче первого элемента массива: http://www.jsfiddle.net/KFdnG/

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

как то так: http://www.jsfiddle.net/KFdnG/4/

// store an instance into each content div and set initial state to hidden.
$$("div.widget_box_content_cont").each(function(el) {
    el.store("fxslide", new Fx.Slide(el).hide());
});

$$('a.widget_minimize').addEvent('click', function(event) {
    event.stop();
    // can't use this.getNext() due to wrapper by Fx.Slide which does not have the instance.
    this.getParent().getElement("div.widget_box_content_cont").retrieve("fxslide").toggle();
});

, который работает на разметке:

<div class="widget_box">
    <div class="widget_box_content">
        <a href="#" class="widget_minimize">link</a>
        <div class="widget_box_content_cont">
            some content
        </div>
    </div>
    <div class="widget_box_content">
        <a href="#" class="widget_minimize">link 2</a>
        <div class="widget_box_content_cont">
            some content 2
        </div>
    </div>    
</div>  

это также лучше, поскольку вы не будете создавать новый экземпляр класса Fx.Slide при каждом нажатии, но будете ссылаться на те, которые уже прикреплены к элементу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...