2014-11-03 49 views
0

我使用Reactive-Table來顯示保存在我的Meteor應用程序中的數據,如下面的代碼所示,表中的每一行都有一個鏈接來編輯與此行相關的文檔。我正在嘗試使用編輯鏈接'點擊事件'來捕獲與所選行相關的文檔的_id,但似乎無法得到_id,有人可以檢查我的代碼並讓我知道我在想什麼這裏錯了,如何捕捉_id?由於流星從反應表中檢索文件_id

customerslist.html

<template name="customerslist"> 
    <div class="customerslist"> 
    <div class="page-header"> 
     <h1>Customers List</h1> 
    </div> 

    <div> 
     {{> reactiveTable class="table table-bordered table-hover" collection=customersCollection settings=settings}} 
    </div> 
    </div> 
</template> 

customerslist.js

Template.customerslist.helpers({ 
    customersCollection: function() { 
     return Customers.find({},{sort: {title: 1}}); 
    }, 
    settings: function() { 
     return { 
      rowsPerPage: 10, 
      showFilter: true, 
      showColumnToggles: false, 
      fields: [ 
      { key: 'name', label: 'Customer Name' }, 
      { key: 'email', label: 'Email' },   
      { key: 'phone', label: 'Phone' }, 
      { key: '_id', label: 'Action', sortByValue: false, fn: function(_id){ return new Spacebars.SafeString('<a name="' + _id +'" class="edtlnk" target="_blank" href="' + _id + '/edit"> Edit </a>'); } } 
     ] 
     }; 
    } 
}); 

Template.customerslist.customers = function() { 
    return Customers.find({},{sort: {title: 1}}); 
}; 

Template.customerslist.events({  
    'click .edtlnk': function(e) { 
     var cust = this; 
     event.preventDefault(); 
     console.log('Customer ID: '+cust._id);  
    }   
}); 

回答

0

我不知道流星雖然我開始玩弄它,所以我不關心向上或向下根本沒有選票,只知道你的問題的答案。

我發現了,我相信你看到的,以及事件地圖文檔https://docs.meteor.com/#/full/eventmaps

這被列入DOC:

{ 
    'click p': function (event) { 
    var paragraph = event.currentTarget; // always a P 
    var clickedElement = event.target; // could be the P or a child element 
    } 
} 

如果選擇多個元素匹配一個事件冒泡,它將被多次調用,例如在'點擊 div'或'點擊*'的情況下。如果沒有給出選擇器,則只會在原始目標元素上調用該處理程序一次。

下面的屬性和方法都可以傳遞到處理該事件對象:

String類型 事件的類型,如「點擊」,「模糊」或「按鍵」。

target DOM元素 發起事件的元素。

currentTarget DOM元素 當前處理事件的元素。這是匹配事件映射中選擇器的元素。對於起泡的事件,它可能是目標或目標的祖先,其值隨着事件的起泡而變化。

在我看來,既然target和currentTarget是DOM元素,你不能從這些元素中得到你需要的,或者你指的是插入回調中的Meteor中可用的_id?

3

如果事件選擇器與tr元素相匹配,程序包設置數據上下文的方式this將僅設置爲客戶對象。這使得event.currentTarget tr,但event.target仍然是編輯鏈接。

你可以嘗試這樣的事:

Template.customerslist.events({  
    'click .customerslist tr': function(e) { 
     if ($(e.target).hasClass('edtlnk')) { 
      var cust = this; 
      e.preventDefault(); 
      console.log('Customer ID: '+cust._id); 
     } 
    }   
});