了解 backboneJS:View.extend()
Understanding backboneJS: View.extend()
直到今天我还想使用 backbone 的功能,例如
var PageView = Backbone.View.extend({
template: $.Deferred,
getTemplate: function(tplName) {
var self = this;
ajaxCall(tplName).then(function(hbs) {
self.template.resolve(hbs);
});
}
});
var home = new PageView();
home.getTemplate('home.hbs');
类似于像
这样的纯 JS OOP 方法
var PageView = function() {
this.template = $.Deferred();
}
PageView.prototype.getTemplate = function(tplName) {
var self = this;
ajaxCall(tplName).then(function(hbs) {
self.template.resolve(hbs);
});
}
var home = new PageView();
home.getTemplate('home.hbs');
但是,我目前正在尝试使用 backbone 重建一个网络应用程序,似乎可以解决使用
延迟的问题
home.getTemplate('home.hbs');
将为 Backbone 视图 PageView
的所有实例解决此问题,而在纯 JS 中,这只会解决该特定实例 home
.
当我做第二个实例时:
var page1 = new PageView();
template
属性 已通过 backbone 中的 home.hbs
模板解析。这对我来说很奇怪。
所以我的猜测是我从根本上误解了 backbone 视图的工作原理。
谁能赐教一下?
不同之处在于所有实例的第一个片段 template
属性 引用同一个对象,而在第二个片段中 属性 是使用 different/new 执行构造函数时的 Deferred 实例。如果您在构造函数的 initialize
函数中设置 template
属性,您将获得与第二个片段相同的结果:
var PageView = Backbone.View.extend({
// template: $.Deferred,
initialize: function() {
this.template = $.Deferred;
},
getTemplate: function(tplName) {
var self = this;
ajaxCall(tplName).then(function(hbs) {
self.template.resolve(hbs);
});
}
});
在第二个示例中,如果将 template
设置为构造函数的 prototype
,那么它的行为将类似于 backbone 构造函数:
var PageView = function() {
// this.template = $.Deferred();
}
PageView.prototype.template = $.Deferred();
var instance1 = new PageView();
var instance2 = new PageView();
console.log( instance1.template === instance2.template ); // true
直到今天我还想使用 backbone 的功能,例如
var PageView = Backbone.View.extend({
template: $.Deferred,
getTemplate: function(tplName) {
var self = this;
ajaxCall(tplName).then(function(hbs) {
self.template.resolve(hbs);
});
}
});
var home = new PageView();
home.getTemplate('home.hbs');
类似于像
这样的纯 JS OOP 方法var PageView = function() {
this.template = $.Deferred();
}
PageView.prototype.getTemplate = function(tplName) {
var self = this;
ajaxCall(tplName).then(function(hbs) {
self.template.resolve(hbs);
});
}
var home = new PageView();
home.getTemplate('home.hbs');
但是,我目前正在尝试使用 backbone 重建一个网络应用程序,似乎可以解决使用
延迟的问题home.getTemplate('home.hbs');
将为 Backbone 视图 PageView
的所有实例解决此问题,而在纯 JS 中,这只会解决该特定实例 home
.
当我做第二个实例时:
var page1 = new PageView();
template
属性 已通过 backbone 中的 home.hbs
模板解析。这对我来说很奇怪。
所以我的猜测是我从根本上误解了 backbone 视图的工作原理。 谁能赐教一下?
不同之处在于所有实例的第一个片段 template
属性 引用同一个对象,而在第二个片段中 属性 是使用 different/new 执行构造函数时的 Deferred 实例。如果您在构造函数的 initialize
函数中设置 template
属性,您将获得与第二个片段相同的结果:
var PageView = Backbone.View.extend({
// template: $.Deferred,
initialize: function() {
this.template = $.Deferred;
},
getTemplate: function(tplName) {
var self = this;
ajaxCall(tplName).then(function(hbs) {
self.template.resolve(hbs);
});
}
});
在第二个示例中,如果将 template
设置为构造函数的 prototype
,那么它的行为将类似于 backbone 构造函数:
var PageView = function() {
// this.template = $.Deferred();
}
PageView.prototype.template = $.Deferred();
var instance1 = new PageView();
var instance2 = new PageView();
console.log( instance1.template === instance2.template ); // true