我创建了一个包含一个简单js文件的节点模块。我想在我的jade文件中使用这个js函数。在music.js中,我需要模块“myplayer”:
var keystone = require('keystone');
exports = module.exports = function(req, res) {
var view = new keystone.View(req, res);
var locals = res.locals;
locals.myplayer = require('myplayer');
// locals.section is used to set the currently selected
// item in the header navigation.
locals.section = 'music';
// Render the view
view.render('music');
};
我知道它正在访问此文件,因为当我在浏览器中访问music.jade时,myplayer js文件中包含一个控制台打印语句,该文件出现在我的终端中。 然后在我的music.jade文件中,我尝试使用myplayer函数,myplayer()。tryplay。
extends ../layouts/default
block content
.container: .jumbotron
img(src='/images/logo.svg', width='160')
h1 Welcome
audio#test(controls='')
source(src='/mymusic/cold.mp3')
| Your browser does not support the audio element.
button Click me
if (section == 'music')
li sees variable
p The Music page is currently under construction
hr
block js
script.
$(document).ready(function(){
$("button").click(myplayer().tryplay)
});
似乎我正确地传递了变量,因为我和locals.section完全一样,它会影响是否“打印变量”。
我得到的错误是“参考错误:myplayer未定义”
所以我有很多问题。 “if(section =='music')”语句实际上是一个jquery命令,而不是css吗?但我没有看到“$”或任何表示这一点的东西。
“部分”显然是值“音乐”的变量,但我无法弄清楚如何在music.jade css脚本或内部javascript中打印出来。
最后,当然是,为什么不能“$(”按钮“)。click(myplayer()。tryplay)”找到对象myplayer?
似乎我只是在制作简单的语法错误,但我担心我真的迷失了。
感谢您的帮助。
这是我正在尝试重现的内容,但使用node_modules:
extends ../layouts/default
block content
.container: .jumbotron
img(src='/images/logo.svg', width='160')
h1 Welcome
audio#test(controls='')
source(src='/mymusic/cold.mp3')
| Your browser does not support the audio element.
button Click me
p The Music page is currently under construction
hr
block js
script(src='/jplay/my_jquery.js')
script.
$(document).ready(function(){
$("button").click(tryplay)
});
这是my_jquery.js文件:
var tryplay = function(){
$("#test")[0].play();}
以上2个文件正常。 我创建的myplayer node_modules主文件是:
var exports = module.exports = {} ;
function startup () {
var tryplay = function(){
$("#test")[0].play();}
console.log ("runUserScript");
}
startup ();
我不打算创建一个字符串,我想把这个函数传递给music.jade。显然,使用locals.myplayer是不正确的?
所以我将music.js改为:
var keystone = require('keystone');
exports = module.exports = function(req, res) {
var myplayer = require('myplayer');
var view = new keystone.View(req, res);
var locals = res.locals;
// locals.myplayer = require('myplayer');
// locals.section is used to set the currently selected
// item in the header navigation.
locals.section = 'music';
// Render the view
view.render('music');
};
我将music.jade改为:
extends ../layouts/default
block content
.container: .jumbotron
img(src='/images/logo.svg', width='160')
h1 !{section}
audio#test(controls='')
source(src='/mymusic/cold.mp3')
| Your browser does not support the audio element.
button Click me
p The Music page is currently under construction
hr
block js
script.
$(document).ready(function(){
$("button").click(function(){myplayer().tryplay})
});
但现在我得到“ReferenceError:myplayer未定义”,所以我没有到达任何地方。
答案 0 :(得分:0)
阅读本文后: Script path for ExpressJS in node_modules 我意识到我开始正确地做事。您的客户端javascript文件应该位于公用文件夹中,而不是node_modules文件夹中。以上链接描述了如何访问node_modules中的文件。 我试图这样做的原因是因为我用“npm install”下载了jplayer并且为了让它运行我必须将jquery.jplayer.js文件复制到公共目录,这似乎不正确。 我应该做的是使用“凉亭”这两个网站建议? https://github.com/happyworm/jPlayer和 How to include scripts located inside the node_modules folder?