2015-12-29 1 views
1

У меня есть layoutView, который хранит целенаправленный элемент так:После визуализации, элемент с JQuery обертке не reconized

this.model.searchBookingTriggerElement = document.activeElement; 

layoutView является reRendered, и я стараюсь, чтобы вызвать следующее:

onRender: function() { 
    var self = this; 
    _.defer(function() { 
     if (self.model.searchBookingTriggerElement) { 
      $(self.model.searchBookingTriggerElement).hide(); 
     } 
    }); 
} 

Этот не работает, что я не могу понять, так как элемент кажется правильным.

Когда я console.log(self.model.searchBookingTriggerElement); я получаю:

<button type="submit" class="btn button item-component btn-medium btn-green">Buscar</button> 

Если я выбираю его непосредственно с помощью простого

$("button").hide(); 

Он работает, как ожидалось (скрывает элемент), то почему не Jquery признавая выбранный элемент кнопки?


Один ключ я нашел, что, когда я парить

<button type="submit" class="btn button item-component btn-medium btn-green" style="display: none;">Buscar</button> 

в develeper инструментов это не красит его на экране, то есть он не связан с ним.

Это потому, что оно было повторно отображено, и теперь это еще один объект, чтобы сказать? Как я могу избежать этого?

Он даже работает, если я:

$("." + $(self.model.searchBookingTriggerElement).attr("class").split(" ").join(".")).hide(); 
+1

вы видите поведение предполагает, что 'searchBookingTriggerElement' не тот же элемент, как' $ («кнопка») [ 0] '. Если вы повторите рендеринг, я ожидаю, что все старые элементы DOM будут убиты, а затем заменены новыми. Как исправить? Вероятно, вы должны сохранить выбранное состояние как свойство вида или, может быть, атрибут модели, сохранение элемента DOM в качестве свойства на модели - это довольно странно. –

+0

@muistooshort эй, спасибо! Я не уверен, что вы предлагаете, так или иначе, я вижу, что у меня есть атрибут и класс, и выберите его, но я не совсем уверен, что это сработает, так как я не знаю, какой элемент будет в не сосредоточитесь ни на том, что у него будет класс или идентификатор и т. д. Поэтому я хочу выбрать сам элемент dom, спасибо за предложение не использовать свойство модели, я перестану его использовать, но я не уверен, как это поможет с тех пор Мне все равно нужно его выбрать, и даже если у меня есть объект (хотя он и не существует), поэтому получение его из атрибута не сильно изменится afaik – Trufa

+1

Рефинансирование должно эффективно выполнять 'some_el.html (new_html) ', и это приведет к уничтожению всего в' some_el' перед созданием новых узлов, в результате вы получите ссылку на элемент DOM, который больше не находится на странице, поэтому выполнение вещей 'searchBookingTriggerElement' не влияет на стр. Почему у вас нет «выбранного» атрибута на ваших моделях или подобных? Таким образом, вы не пытаетесь сохранить состояние в DOM, DOM будет просто отображать состояние, которое хранится в другом месте. –

ответ

0

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

this.searchBookingTriggerElement = document.activeElement.id; 

Я ушел из Отложить, но вы можете добавить его в -

onRender: function() { 
    var self = this; 
    if (self.searchBookingTriggerElement) { 
    $('#' + self.searchBookingTriggerElement).hide(); 
    } 
} 
+0

Кроме того, зачем вам повторно обрабатывать? Вы можете скрыть его без повторного рендеринга, и поскольку это макет, если есть вещи, которые нужно заменить, вы можете заменить их без повторной рендеринга. –

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