JQuery Mobile触发器(’create’)命令不起作用

今晚JQuery Mobile正在哭泣。 我正在尝试构建自定义控件,所以我不会通过我的应用程序重复某些元素,这给了我很多时间。 具体来说,我在HTML文件中有以下内容:

 

在我的主文件中,我基本上是这样做的:

   
$.get('header.html', function (retData) { $('me-header').html(retData).trigger('create'); });

所以这就是问题 – 标题与我将header.html的内容直接粘贴到我的JQM页面时的呈现方式不同。 它几乎感觉像触发器(’创建’)没有做任何事情。

有任何想法吗? 我已经烧了大约三个小时,像http://jquerymobiledictionary.pl/faq.html这样的教程似乎没有应用..

更改页眉,页脚或内容时,您可以在页面上触发pagecreate

 $('#me-header').closest(":jqmData(role='page')").trigger('pagecreate'); 

这是一个jQM错误: https : //github.com/jquery/jquery-mobile/issues/2703 。 根据问题报告中的评论,多次调用pagecreate可能会导致问题,如https://github.com/jquery/jquery-mobile/issues/2703#issuecomment-4677293中所述 。

我相信我找到了“最好”的答案。 简而言之,“标题”和“页脚”类型的数据角色元素不是标准小部件。 它们是某种混合构造。 我通过浏览JQueryMobile的源代码找到了这个。 它们没有’create’方法,因此无法调用。

我的解决方法是直接将类应用于我的代码,而不是期望小部件为我做。 不理想,但它运作良好。

我发现了触发器(’创建’);

当应用于身体时工作如下:

 $('body').append(html).trigger('create'); 

但我现在遇到的问题是ul列表抛出一个未定义的错误。

这个问题现在已经足够老了,但我刚遇到问题所以这就是我如何处理它 – (这维护了set data-theme并为包含的div和header应用了正确的角色)

 $('your_selector').find('div[data-role="header"], div[data-role="footer"]').each( function( ){ var dR = $(this).attr('data-role'); var dT = $(this).attr('data-theme'); $(this).addClass('ui-' + dR + ' ui-bar-' + dT).attr('role', (dR == 'header' ? 'banner' : 'contentinfo') ).children('h1, h2, h3, h4').each( function( ){ $(this).addClass('ui-title').attr({'role':'heading', 'aria-level':'1'}); } ) } ); 

根据您的代码,将其设置为函数并将选择器作为参数发送可能更方便。 希望能帮助到你。

对我来说, .trigger('create'); 如果应用于data-role="page"的元素,则始终有效

试试这个: $('#test-console').trigger('create');

希望能帮助到你..

 $('me-header').html(retData).trigger('create'); 

应该:

 $('me-header').append(retData).trigger('create'); 

也许试试:

 $('#me-header').append(retData).trigger('create'); 

这不是OP的具体问题的答案,但.trigger(’create’)不起作用的一个原因可能是jQuery Mobile未在当前范围内正确加载,因此不会对触发器做出反应 – 这可能发生例如,在配置不当的RequireJS设置中。

如果它显示未定义的话,检查console.log($ .mobile)并没有什么坏处…

与其他人一样,它让我很难在页面中插入标题。 正如安东尼所说,问题是标题不是“基本”小部件。 jqm执行注入时不会添加类。

我不喜欢用自己的方式添加类ui。

我(疯狂?)的建议是创建一个全新的页面(包括标题),然后提取标题标记,包括jqm添加的所有类ui仪式。 我真的不知道性能影响,但它似乎工作,似乎比手工添加类更可行。

下面是一个例子。 你喜欢?

 $( '[data-role=page]' ).on( 'pageinit', function ( event, ui ) { var sHeader = '
'; sHeader += 'Menu1'; sHeader += '

What a nice title

'; sHeader += 'Menu2'; sHeader += '
'; //Create a temporary page to initialize all the ui-class //var sId = core.misc.GUID_new(); var sId = "azerty"; $( '#body' ).append( '
' + sHeader + '
content
' ); $.mobile.initializePage(); //do not know if needed $( '#' + sId ).page(); //very important to let jqm generate the class ui //console.log( "page():\n" + $( '#' + sId ).html() ); var $myHeader = $( '#tobechanged' ); //console.log( "tobechanged:\n" + $myHeader.html()); //clean the temporary page $( '#' + sId ).empty(); $.mobile.initializePage(); //do not know if needed //replace the id //console.log( "myheader id: ... " + $myHeader.attr( "id" ) ); $myHeader.attr( "id", $( "#" + event.target.id ).attr("id") + "Header" ); //console.log( "myheader id: ... " + $myHeader.attr( "id" ) ); $( "#" + event.target.id ).find( "[data-role=header]" ).replaceWith( $myHeader );

});

呼叫:

 trigger('pagecreate'); 

之后立马:

 trigger('create'); 

适合我。