一点点代码让我迷惑了这个宝石---- backbone-bootstrap-rails

时间:2012-11-06 12:15:30

标签: javascript ruby-on-rails gem twitter-bootstrap-rails

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

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

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

资产/ Javascript角/模型/ post.js.coffee

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

    defaults:
      title: null
      content: null

我想知道方法---"定义" ,该方法做了什么,为什么我无法找到方法细节写在哪里?

谢谢!

1 个答案:

答案 0 :(得分:0)

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

根据the 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”和   “库存”。这些是由“./cart”表示的模块   “./inoryory”模块名称。

     

直到my / cart和my / inventory模块才会调用该函数   已加载,该功能接收模块作为“购物车”   和“库存”参数。

     

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

     

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