Javascript 如何在其内部引用主干/木偶视图?
MyView.js:Javascript 如何在其内部引用主干/木偶视图?,javascript,backbone.js,constructor,marionette,backbone-views,Javascript,Backbone.js,Constructor,Marionette,Backbone Views,MyView.js: define(['app/models/MyModel'], function (MyModel) { return Mn.LayoutView.extend({ template: '#my-template', className: 'my-classname', regions: { content: '.content-region',
define(['app/models/MyModel'],
function (MyModel) {
return Mn.LayoutView.extend({
template: '#my-template',
className: 'my-classname',
regions: {
content: '.content-region',
panel: '.panel-region'
}
initialize: function () {
_.bindAll(this, 'childButtonClicked');
},
onShow: function () {
this.getRegion('content').show(new AnotherView());
},
childEvents: {
'some-child-click': 'childButtonClicked'
},
childButtonClicked: function (view) {
var newView = new MyView({
model: new MyModel({
title: view.model.get('title')
})
});
this.getRegion('panel').show(newView);
}
});
});
我正在尝试将MyView的实例嵌套在其自身中。当我构建原型时,将所有内容都转储到一个函数中,这是正确的,如下所示:
var MyView = Mn.LayoutView.extend({
...
childButtonClicked: function(view) {
var newView = new MyView({
...
现在我正试图将视图分离到它们自己的文件中并使用require.js,我无法理解自引用视图的语法
当我按原样运行此代码时,会出现类似“MyView未定义”的错误
如果我将其添加到require头中,如下所示:
define(['app/models/MyModel', 'app/views/MyView'],
function (MyModel, MyView) {
我得到错误“MyView不是函数”
编辑解决方案:
标记的解决方案效果很好,我最终使用了后视镜中明显的:
define(['app/models/MyModel'],
function (MyModel) {
var MyView = Mn.LayoutView.extend({
template: '#my-template',
className: 'my-classname',
regions: {
content: '.content-region',
panel: '.panel-region'
}
initialize: function () {
_.bindAll(this, 'childButtonClicked');
},
onShow: function () {
this.getRegion('content').show(new AnotherView());
},
childEvents: {
'some-child-click': 'childButtonClicked'
},
childButtonClicked: function (view) {
var newView = new MyView({
model: new MyModel({
title: view.model.get('title')
})
});
this.getRegion('panel').show(newView);
}
});
return MyView;
});
您可以在模块中require()
:var MyView=require(app/views/MyView)代码>
因此,为了寻找更好的地方:
childButtonClicked: function (view) {
var MyView = require(app/views/MyView);
var newView = new MyView({
model: new MyModel({
title: view.model.get('title')
})
});
this.getRegion('panel').show(newView);
}