代码之家  ›  专栏  ›  技术社区  ›  Sorebrez

从视图调用普通js函数

  •  1
  • Sorebrez  · 技术社区  · 8 年前

    我很难理解如何在视图中调用javascript函数。我想实现的是一个html表,其中一些字段根据一些参数定期更新。

    因此,我需要一个带参数的函数,该函数获取相应的html元素并设置elements.innerhtml的设置间隔。到目前为止,还不错。我有这个功能

    export default function calcActual(amount, gain, time, index) {
    var td;
    td = document.getElementById('ressource_' + index);
      setInterval(function() {
        td.innerHTML = "actual: " + Math.round(amount + (gain / 3600) * time);
      }, Math.round(gain / 3600));}
    

    在里面 'priv/js/views/user_assets/rou.js'

    在我的“app.js”中,我有以下内容:

    import { calcActual } from './views/user_assets/rou';
    

    据我所知,app.js中的所有代码都填充在一个模块中,所以我不可能直接调用函数。我的下一个想法是在app.js中再次包装函数并从那里调用它。

    export var Calc = {
      calcActual: function(amount, gain, time, index) {
        calcActualRes(amount, gain, time, index)
      }
    }
    

    但我总有个错误 Calc 未定义,当尝试使用以下命令调用函数时:

     <td id="ressource_<%= index %>">
       actual:<script>Calc.calcActual(
                    <%= amount %>,
                    <%= gain %>,
                    <%= NaiveDateTime.diff(NaiveDateTime.utc_now, ressource.updated_at) %>,
                    <%= index %>)
        </script>
      </td>
    

    有人能解释一下,为什么失败了,怎么才能让它工作?

    1 回复  |  直到 8 年前
        1
  •  3
  •   usoban    8 年前

    您需要使用 require 使用前:

    <script>
    var calcActual = require('views/user_assets/rou');
    // do your stuff with calcActual.
    </script>
    

    只要确保 app.js 在您调用之前加载 要求 功能,否则会投诉 要求 未定义。