gpt4 book ai didi

javascript - 无法使用 apply() 调用 Backbone trigger() 方法

转载 作者:行者123 更新时间:2023-11-30 10:20:24 25 4
gpt4 key购买 nike

我正在尝试创建一个通用的辅助函数,该函数可用于触发 Backbone Marionette 模块上的事件。您可以向它传递一个带有“模块”、“事件”和“参数(可选)”键的对象,或此类对象的数组。如果您向它传递具有 moduleevent 属性的单个对象,它将为该模块调用该事件。如果您还向它传递一个 params 属性,它是一个数组,它也会传递它。这是我目前所拥有的:

/**
* Triggers events for given module(s)
*
* @param {object|array} options - Either a single object with 'module', 'event' and 'params (optional)' keys, or an array of such objects
*/
var triggerModuleEvents = function (options) {
require(['webapp'], function (WebApp) {
var i, module, event, params;

if (options instanceof Array) {
for (i = options.length; i--;) {
module = WebApp.module(options[i].module);
event = options[i].event;
params = undefined;
params = options[i].params;

if (typeof params === 'undefined') {
module.trigger(event);
} else if (params instanceof Array) {
params.unshift(event);
module.trigger.apply(this, params);
} else {
throw new TypeError('Params must be an array of parameters to pass with the event.');
}
}
} else if (typeof options === 'object') {
module = WebApp.module(options.module);
event = options.event;
module.trigger(event);
params = undefined;
params = options[i].params;

if (typeof params === 'undefined') {
module.trigger(event);
} else if (params instanceof Array) {
params.unshift(event);
module.trigger.apply(this, params);
} else {
throw new TypeError('Params must be an array of parameters to pass with the event.');
}
} else {
throw new TypeError("Argument must be an object with 'module' and 'event' keys, or an array of such objects.");
}
});
}

所以,我遇到的问题是触发方法 (module.trigger(event)) 工作正常,但我无法传递 params 数组。因为我不知道可能有多少个参数,所以我需要使用 apply() 但是有一些语法问题或者我遗漏了一些东西,只是看不到。具体来说,这一行似乎没有做任何事情 - module.trigger.apply(this, params) 下面是一个如何调用 helper 的示例:

Utils.triggerModuleEvents([
{
module: 'Foo',
event: 'some:event:namespace',
params: [ null, true ]
},
{
module: 'Bar',
event: 'another:event:namespace'
}
]);

最佳答案

问题是使用 this 关键字,正如我所看到的,您只想更改参数顺序而不是将作用域上下文更改为 this,因此您应该将其更改为:

module.trigger.apply(module, params);

关于javascript - 无法使用 apply() 调用 Backbone trigger() 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21687334/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com