Backbone.js实用程序

Nei*_*ung 6 javascript jquery amd requirejs backbone.js

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

我的问题主要是"最佳实践"问题.

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

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

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

jev*_*lio 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;
});
Run Code Online (Sandbox Code Playgroud)

该类的行为与其他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...
      }
    });
  }
});
Run Code Online (Sandbox Code Playgroud)