2013-04-21 4 views
0

Я динамически создаю новую страницу с помощью jQuery mobile. Я хотел бы добавить тему i.e. data-theme="a". Есть ли более простой способ сделать это? На данный момент похоже, что я добавлю его в каждый div ниже.jQuery mobile динамически добавлена ​​тема на страницу

var newPage = $("<div data-role='page' id='" + v["id"] + 
       "'><div data-role=header><a data-iconpos='left' data-icon='back' href='#' data-role='button' " + 
       "data-rel='back'>Back</a>" + 
       "<h1>" + v["name"] + "</h1>" + 
       "</div>" + 
       "<div data-role=content>" + pagecontent + 
       "</div>" + 
       "<div data-role='footer'>" + 
       "<h4>" + v["name"] + "</h4>" + 
       " </div>" + 
       "</div>"); 


      // Append the new page info pageContainer 
      newPage.appendTo($.mobile.pageContainer); 

то было бы хорошо, если бы там было что-то вроде этого ....

newPage.appendTo($.mobile.pageContainer).theme('a'); 

ответ

5

Update - JQuery Mobile 1.4

Существует bug in .page() widget при использовании .page({"theme"}) или .page("option", "theme"). Он не удаляет текущий класс темы, однако он добавляет новый класс темы. Тем не менее, новый класс не отменяет старый класс. Итак, вот исправление.

(function($, undefined) { 
    $.widget("mobile.page", $.mobile.page, { 
    _setOptions: function(o) { 
     if (o.theme !== undefined) { 
     this.element 
      .removeClass(function(i, c) { 
      return (c.match(/\bui-page-theme-\w/g) || []).join(' '); 
      }) 
      .addClass("ui-page-theme-" + o.theme); 
     } 
    } 
    }); 
})(jQuery); 

Примечание: Тема по умолчанию в JQuery Mobile является "а".


Чтобы установить тему для динамически создаваемых страниц, используйте $('.selector').page({theme:'e'}); после добавления страниц и, прежде чем перейти к ним, используя $.mobile.changePage().

Для конкретной страницы:

$('.selector').page({theme:'e'}); 

Для всех страниц:

$('[data-role=page]').page({theme:'e'}); 

Demo - Updated with .page() fix

0

Я использую это и она работает очень здорово: D

Mikael Kindborg answer from Change data-theme in jQuery mobile

$.mobile.changeGlobalTheme = function(theme) 
    { 
     // These themes will be cleared, add more 
     // swatch letters as needed. 
     var themes = " a b c d e"; 

     // Updates the theme for all elements that match the 
     // CSS selector with the specified theme class. 
     function setTheme(cssSelector, themeClass, theme) 
     { 
      $(cssSelector) 
        .removeClass(themes.split(" ").join(" " + themeClass + "-")) 
        .addClass(themeClass + "-" + theme) 
        .attr("data-theme", theme); 
     } 

     // Add more selectors/theme classes as needed. 
     setTheme(".ui-mobile-viewport", "ui-overlay", theme); 
     setTheme("[data-role='page']", "ui-page-theme", theme); 
     setTheme("[data-role='header']", "ui-bar", theme); 
     setTheme("[data-role='listview'] > li", "ui-bar", theme); 
     setTheme(".ui-btn", "ui-btn-up", theme); 
     setTheme(".ui-btn", "ui-btn-hover", theme); 
    }; 
Смежные вопросы