Backbone.js 中未定义传递给 initialize() 视图的参数
Passed parameter to initialize() view is undefined in Backbone.js
我正在开发一个 Backbone.js 应用程序,它使用一个 'master view',所有视图和子视图都从中扩展。
主视图
define(['backbone'], function (Backbone) {
return Backbone.View.extend({
events: {
},
showSuccess: function (msg) {
alert(msg);
}
});
});
然后我有一个生成页面的主视图,这可以调用较小部分的子视图:
define(['backbone','masterView', 'mySubView'], function (Backbone, mView, mySubView) {
var mainView = mView.extend({
events: function () {
return _.extend({}, coreView.prototype.events, {
});
},
render: function () {
var sub = new mySubView({'foo': 'bar'});
}
});
return new mainView();
});
最后,我的 子视图 ,它在初始化时显示 options
未定义。
define(['backbone','masterView', 'mySubView'], function (Backbone, mView, mySubView) {
var subView = mView.extend({
events: function () {
return _.extend({}, coreView.prototype.events, {
});
},
initialize: function (options) {
console.log(options);
}
});
return new subView();
});
在此设置中,当我在 MainView
中传递它们时,为什么 options
未定义?如果子视图不扩展 masterView
,而是扩展 Backbone.view
,它工作正常。
你在子视图文件中的最后一行:
return new subView();
您将返回一个新实例,而不是返回 subview 模块中的构造函数。应该是:
return subView;
请注意,as a convention, JavaScript 代码应该对类型(构造函数、classes 等)和实例(变量、属性等)使用 PascalCase .) 应该使用 camelCase.
此外,我正在 上分享技巧。您可以将合并事件的责任转移到基础 class 而不是每个子 class.
我正在开发一个 Backbone.js 应用程序,它使用一个 'master view',所有视图和子视图都从中扩展。
主视图
define(['backbone'], function (Backbone) {
return Backbone.View.extend({
events: {
},
showSuccess: function (msg) {
alert(msg);
}
});
});
然后我有一个生成页面的主视图,这可以调用较小部分的子视图:
define(['backbone','masterView', 'mySubView'], function (Backbone, mView, mySubView) {
var mainView = mView.extend({
events: function () {
return _.extend({}, coreView.prototype.events, {
});
},
render: function () {
var sub = new mySubView({'foo': 'bar'});
}
});
return new mainView();
});
最后,我的 子视图 ,它在初始化时显示 options
未定义。
define(['backbone','masterView', 'mySubView'], function (Backbone, mView, mySubView) {
var subView = mView.extend({
events: function () {
return _.extend({}, coreView.prototype.events, {
});
},
initialize: function (options) {
console.log(options);
}
});
return new subView();
});
在此设置中,当我在 MainView
中传递它们时,为什么 options
未定义?如果子视图不扩展 masterView
,而是扩展 Backbone.view
,它工作正常。
你在子视图文件中的最后一行:
return new subView();
您将返回一个新实例,而不是返回 subview 模块中的构造函数。应该是:
return subView;
请注意,as a convention, JavaScript 代码应该对类型(构造函数、classes 等)和实例(变量、属性等)使用 PascalCase .) 应该使用 camelCase.
此外,我正在