将函数定义为成员而不执行它

时间:2017-04-28 18:31:06

标签: javascript jquery html extjs extjs3

我有一个Ext obj,包含2个pdf文件。当渲染这些文件时,我想检查用户是否在下载文件之前登录。我以为我可以通过onclick属性实现这一点,但代码会在加载页面后立即运行,并且会立即显示消息。

function download(url) {
    if (hasRights(url)) {
        //window.open(url, '_blank', 'height=480,width=640,resizable=yes,scrollbars=yes,toolbar=yes,location=yes', false);
        return true;
    } else {
        if (checkLoggedIn()) {
            Ext.MessageBox.alert('Insufficient Rights');
        }
    }
    return false;
}

var treeObj = [];
treeObj.push({text: 'Ex 1', leaf:true, href:download('/ex.pdf'), cls:'tree-pdf'});
treeObj.push({text: 'Ex 2', leaf:true, href:download('/ex2.pdf'), cls:'tree-pdf'});

如何在extjs

中获得onclick功能

1 个答案:

答案 0 :(得分:0)

这个问题并不是特定于extjs。

使用函数作为成员定义对象的方式不正确。如果要将函数定义为对象的成员,则不能像以前那样直接调用它。您有两种选择:

  1. 首先将函数保存到变量中,并将其传递给bind的网址:

    var downloadFn = function (url) {
       if (hasRights(url)) {
       (...) 
    };
    treeObj.push({text: 'Ex 1', leaf:true, href:downloadFn.bind(null, '/ex.pdf'), cls:'tree-pdf'});
    
  2. 创建一个调用原始函数的新函数:

    function download(url) {
        (...) 
    }
    treeObj.push({text: 'Ex 1', leaf:true, href:function () {
        download('/ex.pdf')
    } , cls:'tree-pdf'});