javascript - Backbone.js 实用程序

标签 javascript jquery backbone.js requirejs amd

<分区>

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

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

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

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

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

最佳答案

为此目的使用 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 对象相似,因为它可以被扩展,它的实例有一个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...
      }
    });
  }
});

关于javascript - Backbone.js 实用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14686401/

相关文章:

javascript - 在非持久性后台脚本上添加上下文菜单项?

javascript - 元素阻塞滚动事件

javascript - "SyntaxError: Unexpected token ' : '. Parse error." JSON & ajax

jquery - jsFiddle 说 jQuery 代码不正确,但在我的网站上仍然有效

javascript - 向主干中的原型(prototype)对象添加值不起作用

javascript - 当集合重置时,我的模型可以绑定(bind)到什么?

javascript - 当用户尝试下载文件时实现 'Save As' 弹出窗口

javascript - Chrome 打包应用程序 : Check if 'Experimental Extension APIs' flag is enabled

javascript - 如何在数据类型为 'text' 的 jQuery 中执行跨域 ajax?

javascript - 对具有多个属性的 Backbone 集合进行排序