我如何正确地预增强与jQuery移动版的八字胡模板

How can I correctly pre-enhance Mustache templates with jQuery Mobile?

本文关键字:移动 八字胡 jQuery 正确地 增强      更新时间:2023-09-26

我正试图加快我的jQuery移动和基于backbone.js的应用程序,特别是当它是增强表单元素的部分(有很多)。我想我可以让jQM"预增强"表单模板,然后用增强的标记编译模板函数,而不必在每个页面呈现上增强所有表单元素。这工作得很好,直到我实现选中/未选中复选框。模板基本上看起来像:

<form>
    <fieldset data-role="controlgroup">
        <legend>{{legend}}</legend>
        {{#items}}
        <label for="{{id}}">{{#name}}{{name}}{{/name}}{{^name}}No name given{{/name}}</label>
        <input type="checkbox" id="{{id}}" {{#checked}}checked{{/checked}}>
        {{/items}}
    </fieldset>
</form>

当我在Backbone-View中定义我的模板函数时,我试图做以下事情:

var preEnhance = $('<div>').hide().html($('#tmpl').html()).appendTo($('body')).trigger('create');
return Mustache.compile(preEnhance.html());

我想对如下数据使用它:

{legend: 'Pre Enhanced Forms, How?', items:[{id:'a',name:'A', checked: true},{id:'b',name:'B'},{id:'c'}]}

然而,jQuery移动做了一些奇怪的{{#checked}}checked{{/checked}}部分:它变成了{{#checked}}checked{{="" checked}}="",我猜是由于/, jQM将解释为结束标签的开始(纠正我,如果我错了)。这样,我就不能再渲染模板了。

我能做点什么吗?我做错了什么吗?是否有更好的方法来使用预增强模板?我不想在模板中使用增强的硬编码标记。

还有一个(失败的)演示小提琴给感兴趣的人。

试试这个。只需添加checked属性并传递checked值。

<input type="checkbox" id="{{id}}" checked="{{#checked}}{{checked}}{{/checked}}" >

我更新了jsFiddle http://jsfiddle.net/PxfGt/4/