1

我正在使用Meteor应用程序中的Handlebars并希望执行以下操作:

我有一个包含定期付款数据的数据库。这是我用于显示下一个付款详细信息的标记:

{{#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>

我希望能够通过复选框跟踪是否已收到付款。我通过创建一个字段名称为相应日期和一个简单布尔值的数据库条目来实现这一点。(例如 2013 年 3 月 11 日:假)。所以我需要能够插入与当前对应的字段名称nextpayment的值。

例如,在这种情况下,我想获取数据库条目3-11-2013并插入真/假(或其他)的值,以便我可以使用它。

我的问题是:有什么方法可以将其用于车把模板?

4

1 回答 1

1

如果该复选框是供用户检查的,那么您可能会调用另一个字段check_payment,可按如下方式使用:

<input type="checkbox" name="check_payment" class="payment-received" data-id="{{_id}}" checked="
{{#if author}}    
  checked
{{/if}}
">

另一种方法:

由于我不知道您的应用程序的完整数据结构或平台,因此我将做出一些假设并因此使用伪代码。

核心点是在什么时候将一条记录插入到数据库中,对应一个客户和一个日期。一旦客户付款,客户或应用程序本身将勾选复选框(真值),否则默认值为假。

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)数据库级操作:在数据库级执行操作,获取谁已付款和谁未付款以及完整的客户列表。然后在它们之间做交叉操作。您现在可以直接使用车把。

于 2013-11-04T11:36:15.890 回答