【问题标题】:Using RequireJS: should I define inherited resources使用 RequireJS:我应该定义继承的资源吗
【发布时间】:2014-05-11 19:48:08
【问题描述】:

我有一个使用 require.js 的 Backbone 应用程序,我正在尝试确定在链下游定义的资源是否通过原型链向上继承,这似乎是这种情况。如果这是正确的,最佳做法是什么,我应该重新定义它们吗?

我的示例,我有一个基本模型,它提供了一些自定义行为,这些行为将在我的所有模型中通用。

// Base Model
define([
    'backbone'
],
function (Backbone) {
    'use strict';

    return Backbone.Model.extend({

        fetch: function (options) {
            options = options ? options : {};
            options.data = options.data ? options.data : {};
            options.data.nocache = $.now();
            return Backbone.Model.prototype.fetch.call(this, options);
        }
    });
});

然后我有其他模型扩展基本模型以继承这些常用功能。

// Some other model
define([
    'app',
    'backbone',
    'models/base/model'
], 
function(App, Backbone, BaseModel) {
    'use strict';

    return BaseModel.extend({

        url : function() {
            return 'some/url/;
        }   
    });
});

如您所见,我在两个模型中都将backbone 定义为资源,但因为其他模型继承自基本模型。我真的需要在这里定义主干吗?

我正在寻找最佳实践,谢谢!

【问题讨论】:

    标签: javascript inheritance backbone.js requirejs


    【解决方案1】:

    我总是定义模块运行所需的一切。如果你不这样做,它就不是真正的便携。如果您将来删除上游依赖项,您的下游模型也可能会中断。即,

    define('a', ['app','backbone','myplugin', ...]
    define('b', ['app','backbone','a', ...]
    

    如果ba 都使用myplugin,那么在将来某个时候a 不再需要它,当你从a 中删除myplugin 时,你会在不知不觉中破坏b它。

    【讨论】:

      【解决方案2】:

      如果您有一堆 some-other-models,我建议您将它们放在您的 require.js 配置文件中,如下所示:

      require.config({
        paths: {
          'backbone': 'path/to/backbone'
        },
      
        shim: {
          'models/*': { deps: [ 'backbone' ] }
        }
      });
      

      然后你就可以为你的some-other-model 声明deps,知道backbone 已经存在:

      define(['app', 'models/base/model'], function (App, BaseModel) {
        // backbone is already loaded here
      });
      

      【讨论】:

      • 因此可以对整个目录进行通配符。它是否适用于多级目录结构,例如'模型/*/*' ?
      • 应该经过测试才能确定。如果它在我的一个项目上进行了测试,并且由于它有效,我立即发布了它:) 我觉得它应该可以工作。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-21
      • 1970-01-01
      • 2010-12-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多