Если launch
вызывается с контекстом SubMenu100
, вы можете сделать this.callMe.bind(this)
, тогда вы сможете сделать new this()
внутри callMe
.
Но для простоты вы могли бы сделать это:
define([
'backbone.marionette',
'underscore',
'logger',
'tpl!apps/templates/SubMenu100.html',
'i18n!apps/nls/Messages',
'apps/views/SubMenu200'
], function(Marionette, _, Logger, Template, i18n, SubMenu200) {
var SubMenu100 = Class SubMenu100 {
launch: function(e) {
$("#title_wrapper_div").click(this.callMe);
},
callMe: function() {
if (this.subMenu100 === undefined) {
this.subMenu100 = new SubMenu100();
}
window.App.vent.trigger("dashboard:showView", this.subMenu100, "", "", "", "");
}
}
return SubMenu100;
});
Обратите внимание, что каждый launch
будет создавать новый обработчик событий на том же элементе (если что-то еще не выполняет надлежащую очистку), и это может привести к ошибкам. Я не рекомендую использовать глобальные селекторы jQuery в базовых компонентах.
Если вы хотите создать экземпляры SubMenu100
и SubMenu200
, я бы создал компонент более высокого уровня, отвечающий за это:
require([
// ^ ------ this is NOT SubMenu100 definition
'apps/views/SubMenu100',
'apps/views/SubMenu200',
], function (SubMenu100, SubMenu200) {
// this is NOT SubMenu100 definition
launch: function (e) {
$("#title_wrapper_div").click(this.callMe);
},
callMe: function () {
if (this.subMenu100 === undefined) {
this.subMenu100 = new SubMenu100();
}
}
});