6

我目前正在将 Backbone 视为一种组织我们的 javascript 文件并为我们的代码创建一个干净的结构的方法。

我的问题主要是“最佳实践”问题。

该库运行良好,我已经成功地使用 AMD 和 requirejs 设置了我的结构。我的问题与我正在运行的几个实用程序文件有关。从 XML 文档中获取数据并将其转换为 json 数据对象(因此可以本地化数据)。另一个是加载并连接到 Facebook 的实用程序。我将这两个都创建为“模型”。

可以说,这些模型在连接到服务时可能应该是“控制器”,但需要调用这些模型,而无需浏览到路由器(或控制器)文件中的 hashbang。

我应该为这两个实用程序文件扩展主干模型还是我应该做些什么来实现这样的实用程序文件?

4

2 回答 2

6

出于此目的使用s客观上没有任何问题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...
      }
    });
  }
});
于 2013-02-04T12:20:52.103 回答
1

Addy Osmani 有一本免费的bone.js 电子书“开发 Backbone.js 应用程序”:http: //addyosmani.github.com/backbone-fundamentals/

开头有一章是关于 MVC 和 MV*的。

后面还有一章介绍 requirejs 和 AMD

于 2013-02-04T12:37:17.683 回答