我熟悉构建主干应用程序,但我试图将其转换为使用requirejs,我面临的问题是当我尝试扩展父视图时,它是undefined
尝试将base-view.js扩展为properties-view.js
时 define(['backbone','underscore','jquery','views/node/base-view'],
function(Backbone, _, $, NodeBaseView){
PropertiesView = NodeBaseView.extend({
});
}
});
在父基本视图中实例化子视图
define(['backbone','underscore','jquery','views/node/properites-view'], function(Backbone, _, $, PropertiesView){
NodeBaseView = Backbone.View.extend({
..
new PropertiesView({});
..
});
});
尝试为PropertiesView扩展NodeBaseView时{Node}为undefined
。任何帮助?
注意:我在这里使用AMD版本的骨干和下划线https://github.com/amdjs
答案 0 :(得分:3)
这里的问题似乎是循环依赖。基本视图需要属性视图,反之亦然。这导致其中一个未定义。
答案 1 :(得分:3)
让我们假设这个定义位于'views / main'
中define(['backbone', 'views/node/base'],
function(Backbone, BaseView){
var MainView = BaseView.extend({
});
return MainView;
}
);
然后在你的孩子看来:
define(['backbone', 'views/node/base'],
function(Backbone, BaseView) {
var PropertiesView = BaseView.extend({
});
return PropertiesView;
}
);
然后在遥远的宇宙中的其他地方:
myView = new MainView();
使用手册中的示例:
define(['backbone', 'views/node/base'],
function(Backbone, BaseView){
var MainView = BaseView.extend({
});
return MainView;
}
);
然后
define(['backbone'], function (Backbone) {
var BaseView;
require(['views/node/base'], function(b){
BaseView = b;
});
var PropertiesView = BaseView.extend({
});
return PropertiesView;
});
答案 2 :(得分:1)
您可以动态地要求PropertiesView,因此BaseView不必依赖它。
define(['backbone','underscore','jquery','views/node/base-view'],
function(Backbone, _, $, NodeBaseView){
PropertiesView = NodeBaseView.extend({
});
}
return PropertiesView;
});
这里需要PropertiesView
define(['backbone','underscore','jquery'],
function(Backbone, _, $, PropertiesView){
NodeBaseView = Backbone.View.extend({
..
var PropertiesView = require('views/node/properites-view');
..
new PropertiesView({});
..
});
});
示例:
define(['views/node/base-view', 'views/node/properites-view'],
function(NodeBaseView, PropertiesView){
return {
base: new NodeBaseView()
}
});