[英]Backbone views unable to extend using requirejs
I am familiar with building backbone apps but am trying to convert it to use requirejs, the issue i am facing is when i am trying to extend the parent view, it is undefined
我熟悉构建主干应用程序,但我试图将其转换为使用requirejs,我面临的问题是当我尝试扩展父视图时,它是
undefined
when trying to extend base-view.js to properties-view.js 尝试将base-view.js扩展到properties-view.js时
define(['backbone','underscore','jquery','views/node/base-view'],
function(Backbone, _, $, NodeBaseView){
PropertiesView = NodeBaseView.extend({
});
}
});
Instantiating a child view inside the parent base view 在父基本视图中实例化子视图
define(['backbone','underscore','jquery','views/node/properites-view'], function(Backbone, _, $, PropertiesView){
NodeBaseView = Backbone.View.extend({
..
new PropertiesView({});
..
});
});
Here NodeBaseView is undefined
when trying to extend it for PropertiesView. 尝试为PropertiesView扩展NodeBaseView时
undefined
NodeBaseView。 Any Help? 任何帮助?
Note: I am using AMD versions of backbone and underscore from here https://github.com/amdjs 注意:我在这里使用AMD版本的骨干和下划线https://github.com/amdjs
The problem here appears to be a circular dependency. 这里的问题似乎是循环依赖。 Base view requires properties view, and vice versa.
基本视图需要属性视图,反之亦然。 This results in one of them being undefined.
这导致其中一个未定义。
Let's pretend this definition sits in 'views/main' 让我们假装这个定义位于'views / main'
define(['backbone', 'views/node/base'],
function(Backbone, BaseView){
var MainView = BaseView.extend({
});
return MainView;
}
);
Then as your child view: 然后作为您的孩子观点:
define(['backbone', 'views/node/base'],
function(Backbone, BaseView) {
var PropertiesView = BaseView.extend({
});
return PropertiesView;
}
);
Then somewhere else in a universe far far away: 然后在遥远的宇宙中的其他地方:
myView = new MainView();
Using the example from the manual: 使用手册中的示例:
define(['backbone', 'views/node/base'],
function(Backbone, BaseView){
var MainView = BaseView.extend({
});
return MainView;
}
);
Then 然后
define(['backbone'], function (Backbone) {
var BaseView;
require(['views/node/base'], function(b){
BaseView = b;
});
var PropertiesView = BaseView.extend({
});
return PropertiesView;
});
You could require PropertiesView dynamically so BaseView does not have to depend on it. 您可以动态地要求PropertiesView,因此BaseView不必依赖它。
define(['backbone','underscore','jquery','views/node/base-view'],
function(Backbone, _, $, NodeBaseView){
PropertiesView = NodeBaseView.extend({
});
}
return PropertiesView;
});
Here you require PropertiesView 这里需要PropertiesView
define(['backbone','underscore','jquery'],
function(Backbone, _, $, PropertiesView){
NodeBaseView = Backbone.View.extend({
..
var PropertiesView = require('views/node/properites-view');
..
new PropertiesView({});
..
});
});
Example: 例:
define(['views/node/base-view', 'views/node/properites-view'],
function(NodeBaseView, PropertiesView){
return {
base: new NodeBaseView()
}
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.