2013-11-04 44 views
1

我與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:錯誤)。所以我需要能夠插入字段名稱對應於當前的nextpayment值。

例如,在這種情況下,我想獲取3-11-2013的數據庫條目並插入true/false(或其他)的值,以便我可以使用它。

我的問題是:有什麼辦法可以將它工作到句柄模板?

回答

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)數據庫級操作:在數據庫級執行操作以獲取已付款和未付款的用戶以及完整的客戶列表。然後在它們之間進行交叉操作。你現在可以直接使用把手。

+0

問題是,身份證對應於個人客戶,但每個客戶都有多個與他們關聯的付款,以跟蹤(每個月一個)的狀態。所以我需要找出一種方法來識別和跟蹤每筆個人付款。我目前的解決方案是使用付款的具體日期作爲字段名稱,但顯然這導致我目前的問題。 – Calvin

+1

還有另外一種方法,如果有一個記錄對應一個日期,那麼選中複選框,否則,保持複選框爲空。它聽起來如何? – stackoverflowery

+1

這樣,您只需要''customer1':'2013-11-04'而不是''customer1':'2013-11-04':false'。 – stackoverflowery