【问题标题】:Call function from coffeescript file in html file [duplicate]从html文件中的coffeescript文件调用函数[重复]
【发布时间】:2015-08-24 05:12:10
【问题描述】:

我是 coffeescript 的新手。在包含我的咖啡脚本文件functions.coffee 后,会生成以下文件main.js:

(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){
'use strict';
require('../../modules/common/frontend/functions');



},{"../../modules/common/frontend/functions":2}],2:[function(require,module,exports){
//Link selection in menu
function setCurrentlink(){
    var currenturl=window.location.href;
    var part=currenturl.match(/\n\/displaywizard\/(.*)$/g);
    alert(part);
}

...

},{}]},{},[1])
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9icm93c2VyLXBhY2sv...

我一直试图从 html 文件中调用函数 setCurrentlink 为:

<script type="text/javascript">setCurrentlink();</script>

我尝试将指向 js 文件的链接放在页面底部的 head 部分,但我收到一条错误消息,提示“找不到变量 setCurrentlink”。请帮我找出我的错误或我遗漏的任何东西。

functions.coffee

#@export functions

#Link selection in menu

setCurrentlink = ->
  currenturl = window.location.href
  part = currenturl.match(/\n\/displaywizard\/(.*)$/g)
  alert currenturl
  return
...

【问题讨论】:

    标签: javascript coffeescript


    【解决方案1】:

    您的函数是在函数中定义的,因此它的范围仅限于该函数。您需要全局定义函数才能使其正常工作。也就是说,您可能会以错误的方式处理此问题。如果我有更多关于您要完成的工作的信息,我可以提供进一步的建议。

    【讨论】:

    • 另外,看起来您正在使用一个打包实用程序来保护您免于发布到全局范围,正如我所提到的,这通常是一件好事。
    • 谢谢@Shawn。我正在使用一个名为 I-tier 的框架,它由 node.js 和 coffeescript 支持。需要的 JS/coffee 文件的路径在 core/frontend/main.coffee 中提到 require /path/to/file ,然后使用 gulp watch 后,在 assets 中生成文件 main.js。我要做的就是调用在指定的咖啡或 js 文件之一中定义的函数。我该怎么做?
    • 它需要您的脚本并将它们放在一个立即调用的函数表达式 (iife) 中,用于限制变量范围。如果您确定希望此函数全局可用,则可以将其添加到 Window 对象。但同样,请不要,你的方法是错误的。我对 I-Tier 一无所知,但您可能正在使用该框架。看来您指的是 Groupon 的交互层框架。如果您有指向框架主页的链接会有所帮助。
    • 是的,你是对的。我正在使用 Groupon 的 I-Tier 框架。不幸的是,框架文档需要我无法提供的登录凭据。
    • 明白了。我会查看这些文档并找出你应该如何做任何你想做的事情 - 很确定他们不希望你像这样在全局范围内操作。
    猜你喜欢
    • 2013-06-20
    • 1970-01-01
    • 2019-10-05
    • 2018-01-01
    • 2016-08-18
    • 2019-01-23
    • 2012-10-14
    • 2015-08-23
    • 2017-03-06
    相关资源
    最近更新 更多