1

在 bootstrap.js.coffee 中,有一些代码:

define [], ->
  App =
    Models: {}
    Collections: {}
    Routers: {}
    Helpers: {}
    Views: {
      Posts: {}
      Common: {}
      Sessions: {}
      Tokens: {}
      Passwords: {}
      Confirmations: {}
    }

我不明白为什么“定义”方法在 js 代码中?而且,在其他代码中,这种“定义”方法无处不在!

资产/javascripts/models/post.js.coffee

define ['backbone', 'bootstrap'], (Backbone, App) ->
  class App.Models.Post extends Backbone.Model
    paramRoot: 'post'
    urlRoot: '/posts'

    defaults:
      title: null
      content: null

我想知道方法---“定义”,方法是做什么的,为什么我找不到要写的方法细节??

谢谢 !

4

1 回答 1

0

我不是 JavaScript 人,但我相信这是 RequireJS 的一部分。

根据docs,它似乎正在定义具有依赖关系的函数:

如果模块具有依赖项,则第一个参数应该是依赖项名称的数组,第二个参数应该是定义函数。加载所有依赖项后,将调用该函数来定义模块。该函数应该返回一个定义模块的对象。依赖项将作为函数参数传递给定义函数,按照与依赖项数组中的顺序相同的顺序列出:

//my/shirt.js now has some dependencies, a cart and inventory
//module in the same directory as shirt.js
define(["./cart", "./inventory"], function(cart, inventory) {
        //return an object to define the "my/shirt" module.
        return {
            color: "blue",
            size: "large",
            addToCart: function() {
                inventory.decrement(this);
                cart.add(this);
            }
        }
    }
);

在此示例中,创建了一个 my/shirt 模块。这取决于我的/购物车和我的/库存。在磁盘上,文件的结构如下:

  • 我的/cart.js
  • 我的/inventory.js
  • 我的/shirt.js

上面的函数调用指定了两个参数,“cart”和“inventory”。这些是由“./cart”和“./inventory”模块名称表示的模块。

在加载 my/cart 和 my/inventory 模块之前,不会调用该函数,并且该函数将模块作为“cart”和“inventory”参数接收。

明确不鼓励定义全局变量的模块,以便一个模块的多个版本可以同时存在于一个页面中(请参阅高级用法)。此外,函数参数的顺序应与依赖项的顺序相匹配。

函数调用的返回对象定义了“my/shirt”模块。通过以这种方式定义模块,“my/shirt”不会作为全局对象存在。

于 2012-11-06T13:16:21.957 回答