未捕获的TypeError:对象local.process没有方法'call'

时间:2013-12-27 19:53:10

标签: javascript jquery

好的,试着给你足够的信息来理解这个场景,而不是在这里粘贴数百行代码,这是对我所发生的事情的简要总结。

我使用数据属性将不同方法的操作绑定到不同类型的事件,使用带有数据属性的不引人注目的样式。这些都在文档准备好时被解析和绑定。下面是我希望根据指定的事件发生的操作的示例。正如您将看到的那样,属性是多元化的,因为您可以将逗号分隔的值列表放在一起,并且库会将它们拆分为数组并相应地绑定每个数组。 (您可以在单个" Click"事件上运行多个操作。

//An example button
<button data-perform-events="click" 
    data-perform-actions="local.process"></button>    

//The method used to parse the actions
getActions: function (submit) {
    return submit.attr('data-perform-actions').split(',');
}

//The method used to bind the action to the event
bindLocal: function (item, q, i) {
    item.object.on(item.events[q], { model: item, q: q }, function (event) {
        event.data.model.actions[event.data.q].call(this);
    });
}

//The action to be triggered
var local = {
    process: function (request) {
        alert("Called");
    }
}

所有内容都正确设置,事件正常触发......唯一的问题是我遇到了以下错误,我怀疑它与绑定方式有关(来自数据属性的字符串) ,而不是JS代码中的直接赋值)

Uncaught TypeError: Object local.process has no method 'call'

有什么想法?我该如何纠正?

1 个答案:

答案 0 :(得分:0)

下面

event.data.model.actions[event.data.q]

将返回“local.process”,这是一个字符串

现在字符串不能有调用方法

因此你应该尝试

var local = event.data.model.actions[event.data.q];
var arr = local.split(".")
window[arr[0]][arr[1]].call(.....)

arr [0]将是“本地的” arr [1]将是“过程” 所以window [“local”] [“process”]将引用正确的函数。