【问题标题】:Define a function as a member without executing it将函数定义为成员而不执行它
【发布时间】:2017-04-28 18:31:05
【问题描述】:

我有一个带有 2 个 pdf 文件的 Ext obj。当这些文件被渲染时,我想在下载文件之前检查用户是否已登录。我以为我可以通过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 函数

【问题讨论】:

    标签: javascript jquery html extjs extjs3


    【解决方案1】:

    这个问题并不是 extjs 所特有的。

    以函数为成员定义对象的方式不正确。如果你想将一个函数定义为一个对象的成员,你一定不能像你一样直接调用它。你有两个选择:

    1. 先将函数保存到变量中,然后将 url 传递给 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'});
      

    【讨论】:

    • 这两个选项都无法识别函数。相反,他们尝试将点击定向到downloadFn.bind(null, '/ex.pdf'),这会引发 404
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-06-17
    • 1970-01-01
    • 1970-01-01
    • 2012-04-28
    • 2015-05-01
    • 1970-01-01
    • 2018-07-30
    相关资源
    最近更新 更多