【问题标题】:What does this javascript code snippet do?这个 javascript 代码片段有什么作用?
【发布时间】:2011-11-20 14:54:44
【问题描述】:

这是一个简短的问题,因为我没有使用 Google 找到正确的答案。 好的,我有这个 Rails 项目,它有很多 JavaScript 文件(实际上是 CoffeeScript),看起来让球滚动的代码是这样的......

index.html.haml

:javascript
  $(document).ready(function () {
    window.Application.init()
  });

这就是里面的全部内容,我不知道行: window.Application.init() 做什么?各位大神能解释一下吗?

我认为这非常重要,因为该项目主要是一堆咖啡脚本文件,几乎没有任何服务器端处理。

提前致谢!

编辑:(我找到了 Application 类的代码)

class Application
  # Creates the map by using the geolocation center
  # Returns a deferred promise with the bounds
  setup = (position) ->
    deferred = new $.Deferred()
    Ext.setup
      glossOnIcon: false
      onReady: ->
        Application.mapPanel = new MapPanel(position, deferred)
        Application.loading = new Ext.LoadMask( Ext.getBody(), { msg: "Loading..." } )

    deferred.promise()

  # Handles the geolocation error.
  @onFail = ->
    Ext.setup
      onReady: ->
        new Ext.Panel
          fullscreen: true,
          dockedItems: [],
          items: []

        Ext.Msg.confirm "Position Unavailable",
          "Can not confirm your location. Would you like to go to the instructions page?",
          (button) ->
            document.location = if button == "no" then "/posts" else "/instructions"

  @init = ->
    Geolocation.onStart = (position) ->
      $.when(setup(position)).pipe(Post.latest).then (data) ->
        Application.mapPanel.paintPosts data

    Geolocation.onUserRejected = @onFail
    Geolocation.init()

window.Application = Application

【问题讨论】:

  • 如果没有看到“应用程序”对象的代码,就无法确定。它实际上可以是任何东西。
  • 我已经在那里发布了请求的代码。我想一般地知道语法:window.Anything = 任何东西有什么作用? (我显然不明白 'Anything' 是一个 Coffeescript 类),但我想知道该语法最终完成了什么。谢谢先生。

标签: jquery ruby-on-rails haml coffeescript


【解决方案1】:

Erm...它运行函数window.Application.init,该函数可能附加到其他咖啡脚本文件中的window。查找包含class window.Applicationwindow.Application = 的文件。

【讨论】:

  • 你说得对,Application 是一个成熟的 Coffeescript 类。幸运的是,这现在可以引出我的另一个问题。请您向我解释一下,语法:window.Application = Application 是做什么的? (我在原始问题中发布了一些代码),我看到很多次都在使用它,比如 window.Klass = Klass 或 window.OtherClass = OtherClass。那有什么作用?谢谢你..
  • @user766388:这会使文件外部的内容可见。
  • Coffee Script 将所有函数、类和变量隐藏在基于文件的私有范围内。摆脱该范围的方法是设置全局对象的属性(浏览器中的window),使其在任何地方都可用。 Application 需要随处可访问,因此 window.Application = ApplicationApplication 的本地值设置为全局对象的 Application 属性,从而使其随处可用。
【解决方案2】:

回答您的后续问题:

window.Application = Application

有效地将本地引用“应用程序”提升为全局符号。浏览器中的window 对象是全局范围,因此全局变量是对window 属性的引用。因此,创建window 的属性并将其设置为某个值(一个对象,在这种情况下可能是一个函数;我对 Coffeescript 了解不多)使该值在全局范围内可用。

【讨论】:

  • 非常感谢!我也是一个 Coffeescript 学习者,所以我对这个话题很困惑。我将不得不进一步研究,再次非常感谢您。
【解决方案3】:

它启动使用咖啡脚本构建的应用程序。查看应用的初始化器,一步步调试。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-05-09
    • 1970-01-01
    • 1970-01-01
    • 2012-08-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多