Backbone.js 主干listenTo的类似jQuery的事件映射?

Backbone.js 主干listenTo的类似jQuery的事件映射?,backbone.js,backbone-views,backbone-events,Backbone.js,Backbone Views,Backbone Events,我有一个视图,它需要侦听模型属性的更改。当该更改事件触发时,我必须调用两个不同的回调函数。我知道这可以很容易地完成使用 model.on({ 'change:title' : updateTitle, 'change:title' : updateSummary }); 但是当使用listenTo时,我必须用多行来写 this.listenTo(model, 'change:title', updateTitle); this.listenTo(model, 'change

我有一个视图,它需要侦听模型属性的更改。当该更改事件触发时,我必须调用两个不同的回调函数。我知道这可以很容易地完成使用

model.on({
     'change:title' : updateTitle,
     'change:title' : updateSummary
});
但是当使用listenTo时,我必须用多行来写

this.listenTo(model, 'change:title', updateTitle);
this.listenTo(model, 'change:title', updateSummary);
有没有办法避免多次重写listenTo语句? 或者这个问题是否意味着我的代码结构不正确,我应该重新考虑我的方法


一个简单的替代方法是,我从updateTitle调用updateSummary,但我只是想知道是否可以使用object.listenTo作为@muistooshort来实现这一点,在评论中已经提到:

var objParam={
     'change:title' : updateTitle,
     'change:title' : updateSummary
};
model.on(objParam);
仔细查看,
objParam
有两个同名的键,这将在
严格模式下产生错误,否则将覆盖键的先前值&因此,
console.log(objParam)
打印

{         'change:title' : updateSummary    }
这就是作为参数传递给
调用上的

这个问题是否意味着我的代码结构不正确,我应该重新考虑我的方法

我认为在同一事件中注册两个(或更多)侦听器没有任何问题。这是脱钩的核心点。您可以有不同的(解耦)视图,在触发相同事件时更新其内容

我不知道您的其余代码,但我想您的
更新摘要
会侦听除
更改:标题
之外的其他更改事件:

this.listenTo(model, 'change:summary', updateSummary);
在这种情况下,您将同一个侦听器(
updateSummary
)注册到不同的事件(
change:title
change:summary
)。没关系,使用
listenTo
可以将不同的视图更新以解耦的方式连接到不同的模型事件

有没有办法避免多次重写listenTo语句

可能有点过分,但您可以使用下划线提供的函数来实现以下功能:

_.each([updateTitle, updateSummary], _.partial(this.listenTo, model, 'change:title'), this);
一个简单的替代方法是从updateTitle调用updateSummary,但我只是想知道是否可以使用object.listenTo来实现这一点

恐怕
listenTo
只接受回调函数,而不接受函数数组

如果您仍然担心在同一事件中多次使用
listenTo
,您可以创建一个更通用的函数,比如说
update
,它更新标题和摘要,并且只注册这个更通用的更新函数:

this.listenTo(model, 'change:title', update);
或者,如果不需要其他函数,可以使用匿名函数:

this.listenTo(model, 'change:title', function() {updateTitle(); updateSummary();});

由于JavaScript对象中的键是唯一的,因此该
model.on
调用将不起作用。多亏了您和@mu,它太短了,无法指出这一点。我忽略了这件蠢事。谢谢!对于同一事件,我将坚持使用多个侦听器。我不确定是否有更好/更干净的方法来处理这种情况。你的回答非常透彻,深入地解释了我可以采取的替代方法。