行上的YUI DataTable委托事件

时间:2014-03-20 17:04:44

标签: yui

我正在尝试使用委托来捕获事件,当用户点击一行时,我设法捕获事件,但我需要获取该行的特定列的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,但之后我不知道如何让它工作。

2 个答案:

答案 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);
                        });
                    });