在 backbone.js 中通过 trigger() 传递的参数之上传递参数

Passing arguments on top of those passed by trigger() in backbone.js

我有一个方法可以在 Backbone 的嵌套视图中传递参数,例如:

page.get('condition') ? this.trigger('someEvent', object) : this.trigger('someOtherEvent', object);

据我了解,此代码会将对象传递给“someEvent”或“someOtherEvent”,作为该事件的侦听器中指定的回调的第一个参数。

我的监听器(在父视图文件中)看起来像:

this.parentView.on('someEvent', this.someFunction('extraArgument'), this);

默认情况下,如果第二个参数只是 this.someFunction,我假设该函数的第一个参数是 object。 我的问题是除了隐式传递的对象之外,我还想传递 'extraArgument'。

因此,我这样构造 this.someFunction 的签名:

someFunction: function(object, extraArg) {
    ...
}

然而,函数内的调试语句显示 object 实际上是我手动传递的 extraArgument,并且 extraArg 在函数范围内未定义。如何在不覆盖从子视图传递的参数的情况下传递 extraArgument

当你这样说时:

this.parentView.on('someEvent', this.someFunction('extraArgument'), this);

this.parentView.on 的参数列表正在构建时,您正在调用 this.someFunction。然后将 this.someFunction('extraArgument') returns 绑定为 'someEvent' 事件的回调。您的 someFunction 可能没有 return 函数,因此此 on 调用不会做任何有用的事情。

听起来您想对 this.someFunction 进行部分计算,以便创建一个类似于 this.someFunction 的新函数,但第一个参数始终是 'extraArgument'。 Underscore 为此目的提供 _.partial

partial _.partial(function, *arguments)

Partially apply a function by filling in any number of its arguments, without changing its dynamic this value.

所以你会说:

this.parentView.on(
    'someEvent',
    _(this.someFunction).partial('extraArgument'),
    this
);

如果您想在此过程中设置 this,也可以使用 _.bind