我正在Handlebars应用中使用Meteor,并希望执行以下操作:
我有一个包含定期付款数据的数据库。这是我显示下一个付款细节的标记:
{{#each Customers}}
<tr>
<td id="{{nextpayment}}">{{nextpayment}}</td>
<td>{{name}}</td>
<td>{{subscription_amount}}</td>
<td><input type="checkbox" class="payment-received" data-id="{{_id}}"></td>
</tr>
{{/each}}
这会生成以下内容,例如:
<tr>
<td id="3-11-2013">3-11-2013</td>
<td>John Smith</td>
<td>$55</td>
<td><input type="checkbox" class="payment-received" data-id="yZxkFPgeCzpBK6LKJ"></td>
</tr>
我希望能够通过复选框跟踪是否已收到付款。我通过创建一个数据库条目来实现此目的,其中字段名称是相应的日期和一个简单的布尔值。 (例如3-11-2013:false)。所以我需要能够为与当前nextpayment
值对应的字段名称插入值。
例如,在这种情况下,我想获取3-11-2013
的数据库条目并插入值true或false(或其他),以便我可以使用它。
我的问题是:有没有办法将其用于把手模板?
答案 0 :(得分:1)
如果该复选框供用户检查,那么您可能有另一个名为check_payment
的字段,可以按如下方式使用:
<input type="checkbox" name="check_payment" class="payment-received" data-id="{{_id}}" checked="
{{#if author}}
checked
{{/if}}
">
另一种方法:
由于我不知道您的应用程序的完整数据结构或平台,因此我将做出一些假设,从而伪代码。
核心观点是,在与客户和日期对应的数据库中插入记录的时间。一旦客户付款,客户或应用程序本身将勾选复选框(真值),否则默认值为false。
1)服务器端操作:
Handlebars.registerHelper('check_present', function(obj,list, options) {
for(var i=0,j=list.length; i<j; i++) {
if(obj==list[i])return true;
}
return false;
});
{{#each Customers}}
<tr>
<td id="{{nextpayment}}">{{nextpayment}}</td>
<td>{{name}}</td>
<td>{{subscription_amount}}</td>
<td>
<input type="checkbox" class="payment-received" data-id="{{_id}}"
{{if check_present(_id,customer_list) }} //User-defined Handlebar function
checked="checked"
{{/if}}></td>
</tr>
{{/each}}
2)客户端操作:将JS库用于实用程序函数,如Underscore.js,Prototype.js,Backbone.js等。
使用underscore.js和jQuery,
$('.payment_received').each(function(){
if(_.contains(customer_list, $(this).attr('data-id'))){
$(this).attr("checked","checked");
}else{
$(this).removeAttr("checked");
}
})
3)数据库级别操作:在数据库级别执行操作,以获取已付款和未付款的人员以及完整的客户列表。然后在它们之间进行交叉操作。你现在可以直接使用把手。