tma*_*ini 4 javascript requirejs backbone.js
我正在开发一个很大的Backbone.js应用程序.代码采用模块化结构require.js.现在我看到很多骨干代码和教程这样做:
window.app = ( window.app || {} );
Run Code Online (Sandbox Code Playgroud)
之后,他们会将模型定义和Collection实例分配给该全局对象,如下所示:
Task = Backbone.Model.extend({ /*...*/ });
Tasks = Backbone.Collection.extend({ /*...*/ });
window.app.Task = Task;
window.app.Tasks = new Tasks();
// do this with all your models and collections
Run Code Online (Sandbox Code Playgroud)
我喜欢这种方法,因为它简单,不必处理实例化集合的地点和时间.但是,首先将代码require.js分配到一个全局变量(除了全局变量通常是javascript中的错误代码风格)之后,首先将代码分成小位似乎是错误的.
那你对此有何看法,这种方法的优点和缺点是什么?你如何在Backbone中处理你的对象?
首先,污染全局名称空间并不是一个大问题,因为您可以将所有模型包装在自己的命名空间中:
app = (app || {} );
app.Task = Backbone.Model.extend({ /*...*/ });
app.Tasks = Backbone.Collection.extend({ Model:app.Zask });
Run Code Online (Sandbox Code Playgroud)
当涉及到requirejs时,它取决于你的项目的大小.我认为对于较小的项目,你可以不用.使用requirejs的好处不是防止命名空间污染,它的可维护性更好,因为你总能看到模块的依赖关系.您可以编写更好的单元测试,因为您可以测试模块并模拟其所有依赖项.因此,我们从上面的示例结构重建一个大型Backbone应用程序,如下所示:
车型/ Task.js
define(function () {
return Backbone.Model.extend({ /*...*/ });
});
Run Code Online (Sandbox Code Playgroud)
收藏/ Tasks.js
define([models/Task], function (Task) {
return Backbone.Collection.extend({ Model:app.Task });
});
Run Code Online (Sandbox Code Playgroud)
app.js
define([collections/Tasks], function (Tasks) {
var tasks = new Tasks();
tasks.fetch();
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4101 次 |
| 最近记录: |