2014-11-02 179 views
6

我正在学习Express/Node/Jade,现在在Jade文件中我想包含来自公共文件夹的JavaScript文件,仅用于页面。 例如,在玉文件I输入:Jade:加载外部javascript和调用函数

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

和内部test.js我有一个函数

function check_test(){ 
    return "It's working!" 
} 

然后我尝试

- var test_response = check_test() 
叫玉中的作用

比我得到的错误说“未定义不是一个函数”,test.js根本不加载。 显然Jade不加载文件,它们只能转换成HTML代码。

我看着别人的问题,这是我能找到的最接近的问题,但它没有提供明确的答案。 In Jade, how can you call a function in an external Javascript

所以我的问题是:在这种情况下,我应该怎么做才能使它工作?

我不想在layout.js中加载文件,因为我只希望test.js只能被这个页面使用。

回答

3

嗯......在第一个例子中,浏览器中发生的事情与服务器上发生的事情不同。所以如果你在浏览器中,Jade就是HTML的呈现。这就是ExpressJS的运送,即渲染翡翠。如果你想打电话,你的HTML Javascript(渲染翡翠),应该告诉你在哪里的Javascript。对于〔实施例

在Server.js

// Get the Javascript in the browser 
app.use("/javascripts", express.static("./outJavascripts")); 
// Get the URL 
app.all("/", function(req, res){ 
    // Render the Jade and Send for the client (Browser) 
    req.render("myTemplate.jade"); 
}); 

在myTemplate.jade

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

在 “./outJavascripts/test.js”

function check_test(){ 
    console.log("It's working! :D"); 
    return "It's working!"; 
} 

如果你这样做,你会意识到它是在浏览器中运行的,文件“./outJavascripts/test.js”。并且函数“check_test”从不在服务器中运行。

1

或者把所有的文件夹在一个公共文件夹,例如public

public -javascripts -stylesheets -images

,然后暴露公用文件夹

app.use(express.static(path.join(__dirname, 'public')));

这意味着你可以

script(src='/javascripts/script.js') link(rel='stylesheet', href='/stylesheets/style.css')

0

保存您的JS文件,并在你的玉链接它申报为:

script(src="filepath/yourJSfile.js") 

然后调用功能,我使用一个按钮在此例如:

button(class="btn", onclick='functionName()')