我正在尝试使用委托来捕获事件,当用户点击一行时,我设法捕获事件,但我需要获取该行的特定列的id。
例如,我想做同样的小提琴:http://jsfiddle.net/mPzFT/1/ 当您单击某行时,您将获得该行的名称值等。
我尝试做同样的事情,但我有这个错误:
Uncaught TypeError: Object #<c> has no method 'getRecord'
我在DataSource和QueryBuilder中使用DataTable作为客户端的过滤搜索。
这是我的委托代码:
Y.delegate('click', function(e) {
var target = e.currentTarget,
data = this.get('data');
var record = data.getRecord(target.get('id')).getValue();
console.log(record.id);
}, '#enquiry', 'tr', enquiryTable);
我的桌子很大,所以我只把主要部分放在一边:
var enquiryTable = new Y.DataTable({
columns: cols,
sortable: ['id', 'type', 'createdAt', 'customerName', 'customerEmail', 'customerPhone', 'price', 'extrasCost', 'tradeInAllowanceNet', 'deposit']
});
enquiryTable.plug(Y.Plugin.DataTableDataSource, { datasource: ds});
enquiryTable.render("#enquiry");
sendRequest();
所以当我点击一行时,我得到了e.currentTarget,但之后我不知道如何让它工作。
答案 0 :(得分:1)
以下是我的申请中的一个例子:
//....
_tableBindUI : function(table){
table.delegate('click', this._clickCellFn, 'td', this, table);
},
_clickCellFn : function(e, table){
var record = table.getRecord(e.target);
//do some stuff
},
//....
有点不同,但我认为它可能会有所帮助。看起来你只是尝试从不正确的对象执行getRecord。
答案 1 :(得分:0)
好吧我找到了一个解决方法,因为我找不到关于委托的任何解决方案...所以我只是在每一行添加一个带按钮的列,现在当你点击每个按钮时你可以得到它的属性:< / p>
<button class="view-btn" data-value="{value}" data-action="open-enquiry">View</button>
Y.all('.view-btn').each(function(node) {
node.on('click', function(e) {
e.preventDefault();
var id = node.getAttribute('data-value');
console.log(id);
});
});