Javascript 理解BackboneJS
我刚开始学习BackboneJS,我正在做一个小样本文档来测试它的工作方式。但我很难理解它,在这一刻它毫无意义:) 因此,我有下一个文件结构:Javascript 理解BackboneJS,javascript,backbone.js,underscore.js,Javascript,Backbone.js,Underscore.js,我刚开始学习BackboneJS,我正在做一个小样本文档来测试它的工作方式。但我很难理解它,在这一刻它毫无意义:) 因此,我有下一个文件结构: /* application.js */ var Application = Application || {}; ;(function ( $, window, document, undefined ) { new Application.ApplicationView(); })( jQuery, window, document )
/* application.js */
var Application = Application || {};
;(function ( $, window, document, undefined ) {
new Application.ApplicationView();
})( jQuery, window, document );
/* sample.js */
var Application = Application || {};
;(function ( $, window, document, undefined ) {
Application.ApplicationView = Backbone.View.extend({
});
})( jQuery, window, document );
/* utilities.js */
var Application = Application || {};
;(function ( $, window, document, undefined ) {
Application.ApplicationUtilities = Backbone.Collection.extend({
polyfillize : function(tests) {
return _.each(tests, function(obj){
console.log(obj);
Modernizr.load([{
test : _.reduce(obj.test, function(initial_value, current_value){
return initial_value && current_value;
}, 1),
nope : obj.polyfill,
callback: function(url, result, key) {
console.log('Polyfill : ', [ url ]);
}
}]);
});
}
});
})( jQuery, window, document );
/* options.js */
var Application = Application || {};
;(function ( $, window, document, undefined ) {
Application.ApplicationOptions = Backbone.Model.extend({
version : [ 1 ],
prettify : true,
libraries : {
google_code_prettyfier : 'assets/js/libraries/google/prettify.js'
},
dependencies : {
google_code_prettyfier : function() {
return Modernizr.load([{
test : this.prettify,
yep : [ this.libraries.google_code_prettyfier ],
callback: function(url, result, key) {
return window.prettyPrint && prettyPrint();
}
}]);
}
},
polyfills : {
json_polyfill_url : 'http://cdn.chaoscod3r.com/code/polyfills/json3_polyfill.js',
storage_polyfill_url : 'http://cdn.chaoscod3r.com/code/polyfills/localstorage_polyfill.js'
}
});
})( jQuery, window, document );
/* polyfills.js */
var Application = Application || {};
;(function ( $, window, document, undefined ) {
Application.ApplicationPolyfills = Backbone.Model.extend({
loadPolyfills : function() {
return Application.ApplicationUtilities.polyfillize([
{
test : [Modernizr.localstorage, Modernizr.sessionstorage],
polyfill : [Application.ApplicationOptions.polyfills.storage_polyfill_url]
},
{
test : [Modernizr.json],
polyfill : [Application.ApplicationOptions.polyfills.json_polyfill_url]
}
]);
}
});
})( jQuery, window, document );
每个模型都放在它自己的模型文件夹中,每个集合都放在它的集合文件夹中,依此类推。然后我将加载DOM中的所有脚本,首先是集合,然后是模型、视图,最后是application.js
我想做的是能够将集合用作函数集合,我可以在视图或模型中随时使用这些函数,选项应该在任何级别和任何集合/模型/视图中都可用。因此,我的sample.js
文件将包含主视图,该视图将初始化运行onDOM load所需的所有内容,如在必要时加载所有多边形填充,启用google代码修饰器等等
很明显,在这种状态下没有什么是有效的,所以如果可能的话,我希望有更有经验的人来帮助我,或者可以指出一些与我现在尝试做的内容相匹配的教程:)您似乎对主干集合的内容有点困惑 A是(主干)模型的集合: 主干网。收藏 集合是模型的有序集合。[……] 当你这么说的时候:
var C = Backbone.Collection.extend({
method: function() { ... }
});
您正在创建一个“类”,并且在创建新实例后,method
将作为“实例方法”可用,但您不能直接在C
上调用method
,因为将method
放在C.prototype
上进行继承:
C.method(); // This doesn't work, you'll just get an error.
var c = new C;
c.method(); // This works
你这么说
把它放在一个集合中是有意义的,一个实用函数集合:)
但是,不幸的是,仅仅因为某些事情有意义并不意味着它真的是合理的:)
您没有任何适用于Application.ApplicationUtilities
的模型,因此它不是主干意义上的集合。我认为您只想使用对象作为名称空间:
Application.ApplicationUtilities = {
polyfillize: function(tests) { /* ... */ }
};
为什么
Application.ApplicationUtilities
aBackbone.Collection
?@muistooshort~因为我会用它来存储一组实用函数,所以将它放在一个集合中是有意义的,一组实用函数:)问题是,你被告知,Application.ApplicationUtilities.polyfillize
不是一个函数,即使Application.ApplicationUtilities
存在?感谢你的简要解释:)我目前使用JS原型,因为我喜欢它的结构,我尝试迁移到主干网,但这似乎比让事情变得更简单更麻烦:)如果愿意,可以使用的第二个参数添加静态属性。