gpt4 book ai didi

backbone.js - 在backbone.js 中从另一个 View 访问函数

转载 作者:行者123 更新时间:2023-12-04 22:24:15 24 4
gpt4 key购买 nike

我有这种 View 结构:

window.templateLoaderView = Backbone.View.extend({});

window.PopupView = templateLoaderView.extend({
initialize: function () {
this.PopupModel = new PopupModel();
this.event_aggregator.bind("tasks_popup:show", this.loadTaskPopup);
},

render: function() {
template= _.template($('#'+this.PopupModel.templateName).html());
$(this.el).html(template(this.PopupModel.toJSON()));
$('#'+this.PopupModel.containerID).html(this.el);
},

loadTaskPopup: function() {
this.PopupModel.loadTemplate("popupTask_templateHolder", "/js/templates/popup_task.html", "1", "container_dialog");
this.render();
}
});

window.TaskbarView = templateLoaderView.extend({

initialize: function () {
this.TaskbarModel = new TaskbarModel();
this.PopupModel = new PopupModel();
},

loadTaskbarPopup: function() {
this.event_aggregator.trigger("tasks_popup:show");
}

});

所以我想在一个 View 中从另一个 View 中运行函数。据我了解,我需要以某种方式绑定(bind)它们。是否可以在初始化函数中绑定(bind)它们?

我在这里看到了例子: Backbone.js - Binding from one view to another? .他们创建了两个对象,而不是以某种方式绑定(bind)它们。

提前致谢,

最佳答案

我有点喜欢使用“事件聚合器”模式。我确保每个 View 都获得同一个事件聚合器对象的副本,并且它们都可以通过它相互交谈……有点像 CB radio :)

在创建任何 View 之前执行此操作:

Backbone.View.prototype.event_aggregator = _.extend({}, Backbone.Events);

现在,您可以从任何地方发布/订阅:
window.PopupView = Backbone.View.extend({
initialize: function() {
_.bindAll(this, "loadTaskPopup");
this.model = new PopupModel();
this.event_aggregator.bind("tasks_popup:show", this.loadTaskPopup);
},

loadTaskPopup: function() {
// do something with this.model
}
});

window.TaskbarView = Backbone.View.extend({
loadTaskbarPopup: function() {
this.event_aggregator.trigger("tasks_popup:show")
}
});

关于backbone.js - 在backbone.js 中从另一个 View 访问函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7708195/

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