我开始在项目中使用meteor,而且有几个概念对我来说很难从angular + php中获得。
我试图处理两个帮助程序,用于显示表中的记录列表,基于我存储在会话变量中的日期范围。我的模板看起来像这样,我使用一个名为noRecords的助手和另一个叫做记录的记录,记录存储实际的文档集,而在noRecords中我试图存储为布尔值,记录文档集是否为空或不。
div(class='col-md-8 col-md-offset-2')
if noRecords
p There are no records for the selected date
else
table(class='table table-bordered')
thead
tr
td Id
td Name
tbody
each records
+record
不幸的是,我无法在不重复查询的情况下同时设置记录和noRecords,在我的javascript代码中,这些帮助程序现在定义如下:
records : function(){
var startDate = Session.get('searchDate').setHours(0,0,0,0);
var endDate = Session.get('searchDate').setHours(23,59,59,999);
var matches = Records.find(
{date : {
$gte : new Date(startDate),
$lte : new Date(endDate)
}
});
return records;
},
noRecords : function(){
var startDate = Session.get('searchDate').setHours(0,0,0,0);
var endDate = Session.get('searchDate').setHours(23,59,59,999);
var matches = Records.find(
{date : {
$gte : new Date(startDate),
$lte : new Date(endDate)
}
});
return records.count() === 0;
}
日期会话变量由事件设置。
我想必须有一个更好的方法来做这个而不是执行两次查询,我尝试过使用反应变量,但我没有运气,因为我不能让反应变量更新时minimongo查询执行。
有没有办法在不运行两个查询的情况下实现这一目标?
答案 0 :(得分:2)
如果你在多个帮助器中重复相同的逻辑,一个解决方案是将它们减少为一个帮助器并从中返回一个对象,例如:
records : function(){
var startDate = Session.get('searchDate').setHours(0,0,0,0);
var endDate = Session.get('searchDate').setHours(23,59,59,999);
var cursor = Records.find(
{date : {
$gte : new Date(startDate),
$lte : new Date(endDate)
}
});
return {
cursor: cursor,
empty: cursor.count() === 0,
one: cursor.count() === 1
}
}
在你的模板中:
if records.one
p Found One!
愚蠢的例子,但它可以更广泛地使用。
请注意,在您的示例中,您实际上不需要noRecords
帮助器,因为您的模板可以检查空游标:
each records
p date
else
p No records!
答案 1 :(得分:0)
如果您使用的是Blaze,则只能使用{{#each records}}...{{else}}...{{/each}}
帮助records
。
<template name="myTemplate">
<div class='col-md-8 col-md-offset-2'>
{{#each records}}{{> showRecord}}
{{else}}<p>There are no records for the selected date</p>
{{/each}}
</div>
</template>
您也可以使用{{#if records}}...{{else}}...{{/if}}
,因为each
会迭代records
光标中的每个项目
<template name="myTemplate">
<div class='col-md-8 col-md-offset-2'>
{{#if records}}
<table class='table table-bordered'>
<thead>
<tr>
<td>Id</td>
<td>Name</td>
</tr>
</thead>
<tbody>
{{#each}}{{> showRecord}}{{/each}}
</tbody>
</table>
{{else}}<p>There are no records for the selected date</p>
{{/with}}
</div>
</template>