把手动态字段名称

时间:2013-11-04 11:09:05

标签: javascript jquery meteor templating handlebars.js

我正在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(或其他),以便我可以使用它。

我的问题是:有没有办法将其用于把手模板?

1 个答案:

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