【问题标题】:How can Coffescript access functions from other assets?Coffescript 如何访问其他资产的功能?
【发布时间】:2011-09-04 00:23:25
【问题描述】:

所以我有两个控制器,hotelsvideos。我希望hotels.js.coffee 能够访问在videos.js.coffee 中创建的函数,但出现“未定义”错误。

我是 CoffeeScript 新手,所以任何线索都将不胜感激。

【问题讨论】:

标签: coffeescript


【解决方案1】:

在编译期间,CoffeeScript 将您的代码包装在一个匿名函数中并应用它。您必须以适合您环境的预期方式导出您的公共接口。

(exports || window).publicMethod = (foo, bar) -> foo + bar

然后您需要在 node.js 中使用 require() 并在浏览器中引用 window 对象。

在浏览器中还有其他方法可以做到这一点。查看RequireJS

【讨论】:

    【解决方案2】:

    CoffeScript 在匿名函数中运行,因此在同一文件中声明的函数不会导出为全局函数。

    尝试这样声明全局函数:

    window.myFunction = ->
        //some code
    

    【讨论】:

      【解决方案3】:

      确实,您可以使用顶级窗口变量,或者通过 CommonJS 提供的导出对象。请注意,您还可以授予对完整控制器的访问权限,而不仅仅是函数。

      请参阅http://jashkenas.github.com/coffee-script/ 上的“词法范围和变量安全”和“文本/咖啡脚本”脚本标签部分。

      【讨论】:

        【解决方案4】:

        CoffeeScript 会将您的咖啡编译成 JS,并包裹在一个具有窗口范围的自执行函数中 (function{}).call(this);

        所以在 videos.js.coffee 中你可以这样写:

            @getVideo: (id) ->
        

        getVideo 函数将绑定到窗口对象。

        【讨论】:

        • 当我在类似情况下尝试此操作时,我收到一个 javascript 错误:缺少:属性 id [Break On This Error] this.hide_modal: function(modal_id) { My Function:@hide_modal: (modal_id) -> animate_top = Number($('#' + modal_id).height() + 70) current_top = $('#' + modal_id).css('top') $('#' + modal_id).animate top: '-' + animate_top + 'px' 500 -> $(this).css({'top' : current_top, 'visibility': 'hidden'}); $('.reveal-modal-bg').fadeOut()
        • 抱歉:pastebin.com/z9jFwfXp 此后我继续使用相同的代码,只是将 @hide_modal 替换为 window.hide_modal
        猜你喜欢
        • 1970-01-01
        • 2011-10-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-03-13
        • 1970-01-01
        相关资源
        最近更新 更多