gpt4 book ai didi

javascript - Backbone.listenTo 与 this.listenTo

转载 作者:行者123 更新时间:2023-11-30 16:47:31 29 4
gpt4 key购买 nike

Backbone 对象(模型、 View 、路由器)中,我们可以调用 this.listenTo

像这样

var BodyView = Backbone.View.extend({
initialize: function() {
this.listenTo(Backbone, 'prevent-scroll', this.preventScroll);
},

preventScroll: function(prevent) {
// .prevent-scroll has the following CSS rule: overflow: hidden;
this.$el.toggleClass('prevent-scroll', prevent);
}
});

// And now from anywhere in the code:
Backbone.trigger('prevent-scroll', true); // prevent scrolling

但是,有没有办法使用

Backbone.listenTo,而不是 this.listenTo?我没有在网上看到任何这样的例子,但我不明白为什么它不应该存在。

此外,电话中还有一个问题

Backbone.trigger('prevent-scroll', true);

true 参数被传递到哪里?没看懂

最佳答案

您没有解释您需要它做什么,在特定收集/ View /模型实例的上下文之外使用 listenTo 是没有意义的。 listenTo 的全部意义在于,一个对象可以监听另一个对象(从其自身内部)并在该对象销毁时执行清理,并将上下文绑定(bind)到 这个

例如在 View 中 this.listenTo(this.model, ..)this.model.on(...) 更好,因为当 View 被销毁时,监听器将被删除。

如果您不在该上下文中,您只需使用 .on 方法,它会做同样的事情。

var someModel = new Backbone.Model();
someModel.on('change:text', function(model, newValue) { ... }

如果您希望共享模型,您可以通过 View 将其向下传递(如果您已将 View 设置为具有层次结构)。或者像您的其他模板问题一样,您最好设置您的应用程序以使用 RequireJS。然后你可以有一个全局 AppState 模型,例如,它看起来像这样:

define([
'backbone'
], function(Backbone) {

var AppState = Backbone.Model.extend({

...

});

// Return as a singleton (instantiated).
return new AppState();
});

这样每个其他组件都可能需要它,因为它是一个单例,它们都可以访问同一个模型并可以监听它的事件。

关于javascript - Backbone.listenTo 与 this.listenTo,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31015284/

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