在Jade中,如何在外部Javascript中调用函数

时间:2014-02-18 23:51:57

标签: javascript node.js pug

在/javascripts/showlist.js中我(还有一些未显示)

var interestMap = gets loaded from localStorage...

function getInterest(id) {
   return interestMap[id] || '';
}

我的showlist.jade文件看起来像:(大大简化了,它在变量“show”中以一系列dogshows传递)

extends layout

script(src='/javascripts/showlist.js')

block content

  table#showtable.sortable
    thead
      tr
         td... (column headers such as date and location, many are sortable)
    tbody
      each show in shows
         - var interest = getInterest(show._id);  <<< JADE problem here
         tr
           td... (various values, including)
           td =interest   // maybe this should be #{interest}

但是当我尝试调用getInterest()时,我得到“undefined不是函数”。所以它没有看到它。我也尝试了外部javascript的轻微模式

var getInterest = function(id) { ... }

并将getInterest代码内联,但都没有成功。

请注意,此扩展的基本布局为doctype 5,因为它是第一行。

如何从Jade调用外部(或者,我甚至会解决内部)javascript函数。或者我错过了简单而愚蠢的事情?我也尝试过“../javascripts/showlist.js”。

1 个答案:

答案 0 :(得分:3)

您正尝试在服务器端调用客户端功能。这就是为什么它会以未定义的形式回归。它不存在。

您的jade script()标记只是向页面输出<script>标记 - 它不在服务器端运行。为此,您将使用require()代替。

由于你指的是localStorage,你不能简单地复制服务器端的功能并在那里执行它。

但是,您可以更新showlist.js,以便在dom准备好时更新td s及其兴趣值。使用show id向您的td添加html5数据属性。例如

td(data-show-id=show._id)

然后找到需要更新的td并调用getInterest():

$('td[data-show-id]').each(function(index){
    var $el = $(this);
    $el.val(getInterest($el.data('show-id')));
});

假设您正在运行jQuery。