Backbone.js用于多个类似对象属性的通用模板
Backbone.js generic template for multiple similar object properties.
我有一个具有多个类似复杂属性的对象。我想写一个通用模板,可以用于每个属性,但不确定如何进行。我的对象看起来类似于下面的json表示。如果约会/天数是一个集合,那么我可以正常地迭代绑定模板的集合。然而,我需要将每个"天"建模为一个属性——例如,总是有5个条目。
然而,我想问题是你能每天重复使用相同的模板吗。实际上,使用反射迭代每个属性?
{
"days" : {
"monday" : {
"salesman" : "john",
"customer" : "fred"
},
"friday" : {
"salesman" : "paul",
"customer" : "keith"
},
"tuesday" : {
"salesman" : "dave",
"customer" : "graham"
},
"wednesday" : {
"salesman" : "james",
"customer" : "keith"
},
"thursday" : {
"salesman" : "keith",
"customer" : "donald"
}
}
}
如果您可以将格式更改为这样的格式,这将使它变得更容易,因为您可以在几天内使用迭代器,并使用已知键进行插值。
{ days: [{"weekday":"monday", "salesman":"john", "customer":"fred"}, ...]}
然而,使用现有的格式,你可以在Handlebars.js中这样解决这个问题(可能也可以在Mustache.js中使用,但我还没有尝试过):
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title></title>
<script type="text/javascript" src="js/jquery-1.7.1.min.js"></script>
<script type="text/javascript"
src="http://cdnjs.cloudflare.com/ajax/libs/handlebars.js/1.0.0.beta2/handlebars.min.js"></script>
</head>
<body>
<div id="output">
</div>
<script id="tmpl" type="x-template">
<table>
{{#key_value days}}
<tr>
<td><strong>{{key}}</strong></td>
<td>{{value.salesman}}</td>
<td>{{value.customer}}</td>
</tr>
{{/key_value}}
</table>
</script>
<script type="text/javascript">
var data = {
"days":{
"monday":{
"salesman":"john",
"customer":"fred"
},
"friday":{
"salesman":"paul",
"customer":"keith"
},
"tuesday":{
"salesman":"dave",
"customer":"graham"
},
"wednesday":{
"salesman":"james",
"customer":"keith"
},
"thursday":{
"salesman":"keith",
"customer":"donald"
}
}
};
Handlebars.registerHelper("key_value", function (obj, fn) {
var soFar = "";
var key;
for (key in obj) {
if (obj.hasOwnProperty(key)) {
soFar += fn({key:key, value:obj[key]});
}
}
return soFar;
});
var templateSrc = $("#tmpl").html();
var template = Handlebars.compile(templateSrc);
var result = template(data);
$("#output").html(result);
</script>
</body>
</html>
是的,你可以做到。你可以把日模型集合起来。每天模型的一个属性可以是约会模型的约会集合。当您迭代天数集合时,您将获得当天的约会集合。在每一天中,对约会进行迭代。
因此,在这种情况下,您将有一个日期模型的模板和一个约会模型的模板。当你迭代每个集合时,你会创建一个新的主干。查看并传入当前模型。
相关文章:
- 为什么我可以在Array属性对象中找到Javascript Array for Each方法
- 使用onclick调用属性对象函数
- 嵌套为..in 循环,列出多维对象的属性(对象)
- 动态属性对象 - JSON
- 在不使用隔离范围angularjs自定义指令的情况下获取属性对象
- 通过属性传递属性/对象.Javascript
- Javascript:属性/对象的类型
- 访问JSON中的属性(对象)
- 属性对象Javascript不是用Jquery Deferred设置的
- 无法读取属性'#<对象>'未定义的获取错误
- Twitter中多属性对象的子字符串匹配
- 无法设置'data'属性'对象'标记.(只IE8)
- 更新数据属性对象属性值
- 将属性对象的选定对象从原型推入数组
- 将单个属性对象字面量的数组转换为仅包含其值的数组的最佳方法
- 寻找一种更简单的方法来检查是否多个属性&对象中的方法是未定义的
- 主干模型:带有get方法的空属性,但在属性对象中
- 如何赋值给"text"someText"属性对象在动能js
- Angularjs的数据绑定与数据属性对象
- 如何将一个嵌套的javascript对象转换为只有一级属性对象