gpt4 book ai didi

javascript - Node.js Express : re-accessing variables injected into . html 文件

转载 作者:行者123 更新时间:2023-12-03 11:21:50 25 4
gpt4 key购买 nike

我正在使用node.js/express 和 EJS(嵌入式 JavaScript)。

我像这样将一些变量注入(inject)到 .html 页面中

res.render('userHome.html', {
user : user,
teams : teams,
user_db_name : user_db_name
});

userHome.html 内容:

<html>
<head>
<title>SASC Sparks Lineup Generator</title>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"</script>
<script type="text/javascript" src="/fancy_scripts/userHomeController.js"></script>

</head>
<body>

<form onsubmit="chooseImportTeamOrManualCreate(<%=user._id%>)" id="page1">
<!-- <input id="createNewTeam" type="submit" value="Create New Team"/> -->
<button type="submit" value="Create New Team" id="createNewTeamButton">Create New Team</button>

</form>
</body>
</html>

这是 ChooseImportTeamOrManualCreate.js 文件内容

$( document ).ready(function() {});


function chooseImportTeamOrManualCreate(user_id){

//I want user_id to be passed into this method, but this does not work

console.log($.document);

if (window.confirm("Do you wish to import team data from an existing roster?")) {
window.location.replace("/users/" + user_id + "/importNewTeamRoster", "Importing new roster");
// window.open("/users/" + user_id + "/importNewTeamRoster", "Importing new roster");
}
else{
window.location.replace("/users/" + user_id + "/importNewTeamRoster", "Importing new roster");
}
};

*尝试将<%=user._id%>注入(inject)chooseImportTeamOrManualCreate()让我感觉有点傻,因为我知道这可能是错误的。

如何将 user_id 传递到 ChooseImportTeamOrManualCreate() 中,然后进入 ChooseImportTeamOrManualCreate() 后如何访问该变量?也许用户变量附加到文档/窗口 DOM 对象?

最佳答案

找出如何将其呈现到页面中:

<form onsubmit="chooseImportTeamOrManualCreate(<%=user._id%>)" id="page1">

假设<%=user._id%>是一个包含“lk45jqlk43jakljf”的字符串,它是特定用户的数据库 key 。

现在思考:

  • 模板处理程序通常如何在页面中呈现字符串?
  • 带引号还是不带引号?

你回答了吗without quotes ?希望你做到了。为什么这很重要?

那么,表单将调用

chooseImportTeamOrManualCreate(lk45jqlk43jakljf)

看起来还可以吗?也许?

如果 lk45jqlk43jakljf是一个变量名。但是,事实并非如此。这是您要分配给形式参数 user_id文字值 ,因此需要在括号内加上引号,例如 'lk45jqlk43jakljf' 。当有提交时,您需要此调用,并带引号:

chooseImportTeamOrManualCreate('lk45jqlk43jakljf')

由于正在渲染的行已经使用双引号,因此我们必须在这里使用单引号,如下所示:

<form onsubmit="chooseImportTeamOrManualCreate('<%=user._id%>')" id="page1">

所以无论如何user._id也就是说,当它呈现到表单中时它会得到引号。

有时,有人会向您提供一些糟糕的代码,而这些代码只是必须能够工作,并且没有分配时间来正确地重构它。尽管如此,这样的代码对于扩展重构项目来说似乎已经成熟。这里有两件事被称为“糟糕的代码味道”:

  1. 在 HTML 或成为 HTML 的模板中设置事件处理程序。相反,请使用 JS 或 jQuery。例如,参见these jQuery coding standards, under Events #5作者写道:

DO NOT use behavioral markup in HTML (JavaScript inlining), these are debugging nightmares. > Always bind events with jQuery to be consistent so it's easier to attach and remove events > dynamically.

<a id="myLink" href="#" onclick="myEventHandler();">my link</a> <!-- BAD -->

不使用 jQuery?美好的。出于同样的原因,在纯 Javascript 中设置事件仍然比在 HTML 字符串中设置元素的 onSomething 属性更好。

下一个处理此问题的人(可能是您)必须进行更多搜索才能找到相关的代码位及其用途,遵守多种格式规则等……当代码的结构更倾向于常见实践。

  • 将 Javascript 变量数据嵌入 HTML 或成为 HTML 的模板中。这实际上只是上述相同问题的重复。
  • 关于javascript - Node.js Express : re-accessing variables injected into . html 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27074732/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com