好的,试着给你足够的信息来理解这个场景,而不是在这里粘贴数百行代码,这是对我所发生的事情的简要总结。
我使用数据属性将不同方法的操作绑定到不同类型的事件,使用带有数据属性的不引人注目的样式。这些都在文档准备好时被解析和绑定。下面是我希望根据指定的事件发生的操作的示例。正如您将看到的那样,属性是多元化的,因为您可以将逗号分隔的值列表放在一起,并且库会将它们拆分为数组并相应地绑定每个数组。 (您可以在单个" 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'
有什么想法?我该如何纠正?
答案 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”]将引用正确的函数。