我尝试使用meteor制作jobboard app。我能够从数据库中获取数据并将其显示在模板中。但为此我现在正在检索模板中的每个属性。有什么方法可以一次显示全部或部分属性。
Template.postSubmit.events({
'click #submit': function(event){
var job = {};
job.jobtype = $('input[name ="jobtype"]:checked').val();
job.category = $('input[name="category"]:checked').val();
job.location = $('input[name="location"]').val();
job.relocationAssistanceAvailable = $('input[name="relocationAssistanceAvailable"]')[0].checked;
job.description = $('#jobDescription').val();
}
});
//****Return data***//
Template.postDisplay.posts = function(){
return Jobs.find();
}
//**My template where I am retriving data**//
<template name="postDisplay">
<div class="container">
{{#each posts}}
<li>{{location}}</li>
<li>{{jobtype}}</li>
<li>{{category}}</li>
<li>.......</li>
{{/each}}
</div>
</template>
有人可以帮助我显示所有这些项目,而不必像以上那样进行检索。 感谢提前.... !!!!
答案 0 :(得分:1)
如果您没有专门声明每个文档属性以及在html中将如何呈现它的位置/方式,那么您将如何放置它们并设置它们的样式?例如,如果您希望在不同的行,段落或列表项中显示每个属性,就像您正在做的那样?
话虽如此,获得完整属性的唯一方法是作为JSON表示,在http://docs.meteor.com/#ejson_stringify
中描述Template.postDisplay.posts = function(){
return _.each(Jobs.find().fetch(), function(postDocument) {
return EJSON.stringify(postDocument);
});
}
<template name="postDisplay">
<div class="container">
{{#each posts}}
{{.}}<br/>
{{/each}}
</div>
</template>
EJSON还有一个分隔符选项,您可以通过它来实际模仿li
元素
Template.postDisplay.posts = function(){
return _.each(Jobs.find().fetch(), function(postDocument) {
return EJSON.stringify(postDocument, {'string': '</li><li>'});
});
}
<template name="postDisplay">
<div class="container">
{{#each posts}}
<li>{{.}}</li>
{{/each}}
</div>
</template>
附注:您正在打印<li>
个项目,但不会将它们包含在<ul>
中,因此会显示为单个列表。事实上,每个职位都是不同的名单。
答案 1 :(得分:1)
Handlebars可以轻松地遍历数组,就像您可能已经看到{{each}}
帮助器一样。
你想要的是迭代对象键。为此,您需要register a Handlebars helper。
无论如何,迟早你会想要以特定的方式显示某些字段,即使现在它们看起来都像字符串。例如,您可能希望将该位置超链接到Google地图网址,或将该类别超链接到应用中列出该类别中所有作业的页面。
这就是为什么迭代对象键并不常见,我建议在<li>
中包含每个字段并继续使用你的应用程序。