jQuery mobile和Handlebars

Non*_*one 4 markup jquery jquery-mobile handlebars.js jquery-mobile-listview

所以,标题是不言自明的.我正在尝试使用jQuery mobile和Handlebars,但我遇到了表格的CSS或者车把生成的列表视图的问题.似乎CSS被忽略了.

编辑:这是一个实际的实例:http://jsbin.com/adurar/1/edit

在本<head>节中,我有以下代码:

<script id="articles-template" type="text/x-handlebars-template">
<ul data-role="listview" data-autodividers="true"  data-filter="true" data-inset="true">
  {{#entries}} 
    <li><a href="#" onClick="">{{msg}}</a></li>
  {{/entries}}
</ul>
</script>
Run Code Online (Sandbox Code Playgroud)

HTML的主体是非常直接的jquery移动:

<div data-role="page" data-theme="b">

    <div data-role="header">
        <h1>Page Title</h1>
    </div><!-- /header -->

    <div data-role="content">   
        <p>
          <div id="articleHandlebars" data-demo-html="true"></div>
        </p>        
    </div><!-- /content -->

    <div data-role="footer">
        <h4>Page Footer</h4>
    </div><!-- /footer -->
</div><!-- /page -->
Run Code Online (Sandbox Code Playgroud)

在.js文件中我有这个代码:

function showData(data)
{
  var source   = $("#articles-template").html();
  var template = Handlebars.compile(source);
  var html = template(data);
  $("#articleHandlebars").html(html);   
 }
Run Code Online (Sandbox Code Playgroud)

我也尝试添加这个无济于事:

$("#articleHandlebars").trigger('create');
$("#articleHandlebars").listview('refresh');
Run Code Online (Sandbox Code Playgroud)

非常感谢任何形式的帮助!

Gaj*_*res 5

你的代码中有很少的错误,我会用解决方案解释一切.

代码更改:

让我们稍微改变你的页面:

<div data-role="page" data-theme="b" id="listview-page">

    <div data-role="header">
        <h1>Page Title</h1>
    </div><!-- /header -->

    <div data-role="content"  id="listview-content">   
        <p>
          <div id="articleHandlebars" data-demo-html="true"></div>
        </p>        
    </div><!-- /content -->

    <div data-role="footer">
        <h4>Page Footer</h4>
    </div><!-- /footer -->
</div><!-- /page -->
Run Code Online (Sandbox Code Playgroud)

我已将id listview-page添加到页面容器,并将id listview-content添加到内容容器.我们将在我们的解决方案中使用它.

解决方案:

首先,这一行:

$("#articleHandlebars").listview('refresh');
Run Code Online (Sandbox Code Playgroud)

如果不起作用,您只能在列表视图小部件或具有属性data-role ="listview"的ul elemenet上触发listview刷新.如果ul元素直接附加到div #articleHandlebars,请尝试:

$("#articleHandlebars ul").listview('refresh');
Run Code Online (Sandbox Code Playgroud)

或深入到达ul标签.但根据我的经验,它不会起作用,因为您的列表视图是动态生成的,因此您需要在刷新之前初始化listview.因此,如果顶级解决方案无效,请尝试以下方法:

$("#articleHandlebars ul").listview().listview('refresh');
Run Code Online (Sandbox Code Playgroud)

第一个listview()调用将初始化小部件,第二个listview('refresh')将调整它的样式.

第二件事,你正在使用:

$("#articleHandlebars").trigger('create');
Run Code Online (Sandbox Code Playgroud)

它通常应该在内容div上触发,因此如果listview('refresh')不起作用,请尝试:

$("#listview-content").trigger('create');
Run Code Online (Sandbox Code Playgroud)

这只有在您更改页面时才会起作用,就像我在本回答开头时建议的那样.或者最坏的情况尝试这个:

$("#listview-page").trigger('pagecreate');
Run Code Online (Sandbox Code Playgroud)

编辑:

我修复了你的例子:http://jsbin.com/ivezat/1/edit

HTML:

<!DOCTYPE html>
<html>
<head>
<link href="http://code.jquery.com/mobile/latest/jquery.mobile.css" rel="stylesheet" type="text/css" />
<script src="http://code.jquery.com/jquery-1.6.4.min.js"></script>
  <script src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>
<script src="http://code.jquery.com/mobile/latest/jquery.mobile.js"></script>

        <script type="text/javascript" src="http://cloud.github.com/downloads/wycats/handlebars.js/handlebars-1.0.rc.1.js"></script>

<script id="articles-template" type="text/x-handlebars-template">
<ul id="listv" data-role="listview" data-autodividers="true"  data-filter="true" data-inset="true">
  {{#entries}} 
    <li><a href="#" onClick="alert('{{title}}')">{{title}}</a></li>
  {{/entries}}
</ul>
</script>   

<meta charset=utf-8 />
<title>JS Bin</title>
</head>
<body>
<div data-role="page" data-theme="b" id="listview-page">

    <div data-role="header">
        <h1>Page Title</h1>
    </div><!-- /header -->

    <div data-role="content" id="listview-content"> 
        <p>
          <div id="articleHandlebars" data-demo-html="true"></div>
        </p>        
    </div><!-- /content -->

    <div data-role="footer">
        <h4>Page Footer</h4>
    </div><!-- /footer -->
</div><!-- /page -->


</body>
</html>
Run Code Online (Sandbox Code Playgroud)

使用Javascript:

$(document).on('pagebeforeshow', '#listview-page', function(){
    parseRSS(); 
});

function parseRSS() {
      var articles = { entries: []};
      for (var i = 0; i <=4; i++)
      {
        var obj = {
          title: "test" + i
        };
        articles.entries.push(obj);
      }
      showData(articles);

}

function showData(data)
{
 var source   = $("#articles-template").html();
  var template = Handlebars.compile(source);
  var html = template(data);
  $("#articleHandlebars").html(html);   
  $("#articleHandlebars ul").listview().listview('refresh');
 }
Run Code Online (Sandbox Code Playgroud)