1

我有几个主干覆盖,例如

Backbone.Model.prototype.validate = function(data) {...}

在我的项目中运行良好。我想将它们导出到一个新文件中,以便其他项目在需要时使用它们。我不确定该怎么做,也不确定是否应该将它们包装在定义中。

有关如何执行此操作的任何帮助?

4

2 回答 2

1

我建议您查看UMD(通用模块定义)项目,该项目旨在为定义在浏览器以及大多数常见脚本加载器中工作的 javascript 模块提供约定。

为了支持 RequireJS (AMD) 以及浏览器全局变量,您可能需要专门查看 UMD 的AMD/web语法。

这是一个依赖于 Backbone 的中介模块的示例,它可以使用或不使用 RequireJS:

(function (root, factory) { return typeof define === 'function' && define.amd ? define(['backbone'], factory) : (root.mediator = factory(root.Backbone)); }(this,
    function (Backbone) {

    var events = Backbone.Events;

    /**
     * Mediator provides a decoupled communication mechanism.
     * Borrows the implementation from Backbone.
     */
    return {

        //expose the on/off/trigger for native Backbone listenTo/stopListening support.
        on:             events.on,
        off:            events.off,
        trigger:        events.trigger,

        //expose subscribe/unsubsribe/publish aliases for idiomatic mediator pattern interface
        subscribe:      events.on,
        unsubscribe:    events.off,
        publish:        events.trigger
    };
}));

我通常将模块声明压缩为如上所述的一行代码,但请参阅 UMD 的 AMD/web-sample 以获得相同的注释版本。

于 2013-05-30T13:10:30.427 回答
0

假设您在文件 ( libs/validation/rules) 中拥有所有模型的所有角色。

如果你已经在使用 require.js 之类的东西:

// model/user.js
define([
      'libs/validation/rules'    
], function(ValidationRules) {

    return Backbone.Model.extend({
        validate: Validation.User  
    })
})

否则,您可以使用全局对象导出验证规则(坏主意,但它有效):

// model/user.js
Backbone.Model.extend({
    validate: window.Validation.User  
})
于 2013-05-30T16:58:43.697 回答