Javascript 避免使用下划线模板重复-主干
假设我有一个主干模型,它有一组布尔属性:Javascript 避免使用下划线模板重复-主干,javascript,backbone.js,underscore.js,Javascript,Backbone.js,Underscore.js,假设我有一个主干模型,它有一组布尔属性: Car = Backbone.Model.extend({}); car_one = new Car({ a_c: true, mp3: true, gps: false, touchscreen: false, // etc... }) 我希望能够呈现这些布尔属性的列表,并在它们旁边有一个图标,具体取决于true或false。如果为true,图标将为绿色勾号,否则,显示红色X图标 类似于: <ul>
Car = Backbone.Model.extend({});
car_one = new Car({
a_c: true,
mp3: true,
gps: false,
touchscreen: false,
// etc...
})
我希望能够呈现这些布尔属性的列表,并在它们旁边有一个图标,具体取决于true或false。如果为true,图标将为绿色勾号,否则,显示红色X图标
类似于:
<ul>
<li><img src="tick.png">AC</li>
<li><img src="tick.png">MP3</li>
<li><img src="cross.png">Gps</li>
<li><img src="cross.png">Touch screen</li>
</ul>
我有大约12个布尔属性需要这样呈现…您可以从模板中访问JavaScript函数。因此,您可以在
窗口中放置一些内容(即全局范围):
然后,您将希望利用以下优势:
默认情况下,template通过with
语句将数据中的值放入本地范围。但是,可以使用变量设置指定单个变量名。这可以显著提高模板渲染的速度
_.template("<%= data.hasWith %>", {hasWith: 'no'}, {variable: 'data'});
=> "no"
演示:
通过使用变量
选项,您将不得不说
,而不是
,但这是非常次要的
您可以使用类似的方法逐个格式化
并在模板中保留更多HTML
另一个选项是在模板中抛出一个for
循环,如下所示:
var html = _.template($('#t').html(), model.toJSON(), { variable: 'json' });
// or
var tmpl = _.template($('#t').html(), null, { variable: 'json' });
var html = tmpl(model.toJSON());
<script id="t" type="text/x-underscore-template">
<ul>
<% var fields = ['a_c', 'mp3', 'gps', 'touchscreen' ] %>
<% for(var i = 0; i < fields.length; ++i) { %>
<li class="<%= json[fields[i]] ? 'true' : 'false' %>"><%= fields[i] %></li>
<% } %>
</ul>
</script>
演示:
您会注意到,这还使用了变量:“json”
选项,您需要它,以便在变量中使用[]
按名称获取字段。
这样,您就可以从模板中访问JavaScript函数。因此,您可以在窗口中放置一些内容(即全局范围):
然后,您将希望利用以下优势:
默认情况下,template通过with
语句将数据中的值放入本地范围。但是,可以使用变量设置指定单个变量名。这可以显著提高模板渲染的速度
_.template("<%= data.hasWith %>", {hasWith: 'no'}, {variable: 'data'});
=> "no"
演示:
通过使用变量
选项,您将不得不说
,而不是
,但这是非常次要的
您可以使用类似的方法逐个格式化
并在模板中保留更多HTML
另一个选项是在模板中抛出一个for
循环,如下所示:
var html = _.template($('#t').html(), model.toJSON(), { variable: 'json' });
// or
var tmpl = _.template($('#t').html(), null, { variable: 'json' });
var html = tmpl(model.toJSON());
<script id="t" type="text/x-underscore-template">
<ul>
<% var fields = ['a_c', 'mp3', 'gps', 'touchscreen' ] %>
<% for(var i = 0; i < fields.length; ++i) { %>
<li class="<%= json[fields[i]] ? 'true' : 'false' %>"><%= fields[i] %></li>
<% } %>
</ul>
</script>
演示:
您会注意到,这还使用了变量:“json”
选项,您需要它,以便在变量中使用[]
按名称获取字段。
这些都是好东西,我一定会调查这些好东西,我一定会调查的