在/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”。
答案 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。