0

我正在尝试从 Riot.js 中的表达式调用在全局命名空间中声明的函数。

这不起作用:

<strong>Created { getDateString(item.created) } by { item.creator }</strong>

可以调用全局moment()函数(来自 moment.js):

<strong>Created { moment(item.created) } by { item.creator }</strong>

包含此函数的整个 JavaScript 文件加载...如果我从中调用 getDateString()this.on('mount')有效:

this.on('mount', function() {
    getDateString(new Date());
});

我不太了解 Riot.js 中的命名空间是如何工作的,因此我无法弄清楚为什么我对 getDateString() 的调用在表达式中失败但在 mount 函数中成功。有人可以告诉我我做错了什么吗?

4

1 回答 1

4

确保您globalFunction()在全局声明。标签定义内的标签范围<script>不是全局的。照顾它。

<my-tag>
  <p>{ someGlobalFunction(message) }</p><!-- will work -->
  <p>{ localFunction1(message) }</p><!-- won't work -->
  <p>{ localFunction2(message) }</p><!-- will work -->
  <p>{ localFunction3(message) }</p><!-- will work -->

  <script>
    this.message = 'world'

    // Not reachable from the template
    function localFunction1 (arg) {
      return 'Hello ' + arg + '!'
    }

    // Reachable because this is the same as localFunction3
    localFunction2 (arg) {
      return 'Hello ' + arg + '!'
    }

    // Reachable from the template
    this.localFunction3 = function(arg) {
      return 'Hello ' + arg + '!'
    }.bind(this)
  </script>
</my-tag>
于 2015-08-31T21:12:04.323 回答