我目前正在将Backbone视为一种组织我们的javascript文件并为我们的代码创建一个干净结构的方法。
我的问题主要是“最佳实践”问题。
该库运行良好,我已成功设置AMD和requirejs的结构。我的问题涉及我正在运行的几个实用程序文件。一个从XML文档获取数据并将其转换为json数据对象(因此可以对数据进行本地化)。另一个是加载并连接到Facebook的实用程序。我已将这两个创建为“模型”。
可以说这些模型应该是“控制器”,因为它们连接到服务但需要调用这些模型而不需要浏览到路由器(或控制器)文件中的hashbang。
我是否应该扩展这两个实用程序文件的主干模型,或者我应该做些什么来实现这样的实用程序文件?
答案 0 :(得分:6)
为此目的使用Backbone.Model
没有任何客观错误,但无论它感到多么可疑。型号附带额外行李,不属于“服务”或“实用”类型。
相反,我已经为不太适合Backbone Model-View-Collection-Router范例的功能定义了一个更通用的,基本的基类。
define(['backbone', 'underscore'], function(Backbone, _) {
var Class = function() {
this.initialize.apply(this, arguments);
};
//give Class events and a default constructor
_.extend(Class.prototype, Backbone.Events, {initialize: function() {}});
//copy the extend feature from one of the backbone classes
Class.extend = Backbone.Model.extend;
return Class;
});
该类的行为与其他Backbone对象类似,因为它可以extend
编辑,其实例具有initialize
构造函数方法,并且它们支持事件。您的一个示例(本地化服务)可能类似于:
var LocalizationService = Class.extend({
initialize: function(url) {
this.url = url;
this.fetch();
},
fetch: function({
var self = this;
$.ajax({
url:this.url,
success: function(response) {
self.response = response;
self.trigger('fetch:complete', self, response);
//etc...
}
});
}
});
答案 1 :(得分:1)
有一个免费的backbone.js电子书"开发Backbone.js应用程序" 作者:Addy Osmani: http://addyosmani.github.com/backbone-fundamentals/
一开始就有一个chapter about MVC and MV*。