0

Я пытаюсь создать приложение Марионеточной магистрали с использованием jQuery mobile. Я использую Marionette.CollectionView для создания просматриваемого списка jQuery для поиска. Я показываю этот вид, вызывая App.mainRegion.show().Jquery Mobile Listview Фильтр, не показывающий

return Marionette.CollectionView.extend({ 
    tagName: "ul", 
    itemView: UserItemView, 
    emptyView: NoUsersView, 
    attributes: { 
     "data-filter" : "true" 
    }, 

    onShow: function(){ 
     console.log("OnShow!"); 
     //console.log($("body").html()); 
     this.$el.listview(); 
     $.mobile.changePage("#main"); 
    } 
} 

Сначала он показал только простой список. Из-за этого я добавил $ el.listview(). Но фильтр-бар по-прежнему не отображается. Я нашел аналогичный вопрос, в котором говорилось, что элемент должен быть добавлен до вызова .listview(), но я не знаю, когда Marionette добавляет $ el.

Когда я использовал только Backbone, я мог просто называть «append (template) .trigger (« create »)», но триггер, похоже, не работает здесь.

Что делать, чтобы показать фильтр?

Edit: Это ListView генерируется рендер-метод взглядов (с добавлением атрибута «данных ролей»):

<ul data-role="listview" data-filter="true" class="ui-listview"> 
    <li class="ui-li-has-alt ui-first-child ui-last-child"> 
     <a href="#/users/details/hqpmy4j16z11bxfh9f2x" class="ui-btn"> 
      <h2>Thomas Davis</h2> 
      <div class="ui-li-aside">Age: 12</div> 
     </a> 
     <a href="#/users/edit/hqpmy4j16z11bxfh9f2x" data-icon="edit" title="" class="ui-btn ui-btn-icon-notext ui-icon-edit"></a> 
    </li> 
</ul> 

бар фильтр не показывает.

+0

какая версия jQM вы используете? вы можете создать скрипку? – Omar

+1

Я использую версию 1.4.0. Я попытаюсь создать скрипку –

+0

Извините, я не могу заставить скрипку работать правильно:/ –

ответ

0

Я решил проблему. Вы не можете создать панель фильтров с помощью функции .listview(). Единственный способ добиться этого - вызвать событие create-Event.

$("#element").trigger("create"); 

В моем случае это тоже не сработало. Проблема заключалась в том, что я вызывал триггер («создать») списка, когда мне действительно нужно было вызвать триггер («создать») элемента PARENT списка, например.

$("#this-is-the-wrapper-of-listview").trigger("create"); 

Мне было интересно, почему trigger-create работал, когда у меня был нормальный Backbone-View, и именно по этой причине.

+0

'$ (". Ui-listview "). Listview()' или '$ (" ul parent "). BoostWithin()', потому что функция, которую вы используете si, устарела и будет удалена в jQM 1.4 – Omar

+0

Я сейчас используя его в 1.4.0, и он отлично работает. –

+0

он работает, но будет удален позже. поэтому лучше использовать вышеупомянутую функцию, чтобы не сталкиваться с какими-либо проблемами при обновлении jQM :) – Omar

0

При работе с CollectionView или CompositeView вам необходимо добавить дочерний элемент ItemView, используя функцию appendHtml.

appendHtml: function (collectionView, itemView) { 
    collectionView.$el.append(itemView.el); 
} 

Вот ДоП https://github.com/marionettejs/backbone.marionette/blob/master/docs/marionette.collectionview.md#collectionviews-appendhtml

+0

Как это помогает моей проблеме? Я попытался вызвать триггер («создать») и .listview() из этой функции, но фильтр все равно не появится. –

+0

Извините, возможно, у меня есть неправильный конец палки, хотя вы спросили, как и когда марионетка присоединяет элементы? В CollectionView это делается по умолчанию с помощью метода appendHtml, который вы также можете переопределить. –

+0

Я спросил, как я могу получить свою панель фильтров для отображения :) –

0

Я думаю, вы упускаете атрибут data-role с вашей точки зрения.

Для того, чтобы фильтр работал, ваша разметка для элементов ul должна выглядеть так.

<ul data-role="listview" data-filter="true"> 

На данный момент ваш взгляд будет показывать только это.

<ul data-filter="true"> 

Попробуйте добавить атрибут роли данных в свой вид.

return Marionette.CollectionView.extend({ 
    tagName: "ul", 
    itemView: UserItemView, 
    emptyView: NoUsersView, 
    attributes: { 
     "data-role" : "listview", 
     "data-filter" : "true" 
    }, 

    onShow: function(){ 
     console.log("OnShow!"); 
     //console.log($("body").html()); 
     this.$el.listview(); 
     $.mobile.changePage("#main"); 
    } 
} 
+0

Я изначально был там, но я удалил его, так как вызов метода .listview() дал тот же результат с или без роли данных. Даже если я его добавлю, он все еще не отображает панель фильтров. –

+0

Я не думал, что .listview() добавил какие-либо атрибуты к элементу, это не для меня. –

+0

Что генерируется из вашего представления, можете ли вы поделиться им? –