Backbone.js实用程序

时间:2013-02-04 12:03:34

标签: javascript jquery backbone.js requirejs amd

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

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

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

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

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

2 个答案:

答案 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*

稍后还会有chapter about requirejs and AMD