在 Jade 视图中使用 javascript 代码 - if(variable) 显示未定义而不是传递

发布于 2024-11-02 21:48:39 字数 556 浏览 7 评论 0原文

所以这是一个反复出现的问题,我没有找到另一个例子,所以这里是:

渲染 Jade 模板时,即使使用 -if(variableName)<,我也会得到 'variableName' undefined /code> 在模板中。

示例(我将其用作“info”闪存消息的一部分):

-if(info)
  - if(info.length){
   ul
   -info.forEach(function(info){
     li= info
  -})
-}

这将返回“info”未定义,而不是在没有闪存/信息消息时不渲染任何内容。有谁知道我做错了什么?

我知道如上所述的 typeof(variable) != 'undefined 选项。如果我想做类似 -if (typeof(req.session.user) != 'undefined') 的事情,我就必须做 3 个嵌套的 `if (typeof(req) != 'undefined'这是我唯一的选择吗?

So this is a recurring issue I have and haven't found another example on SO so here goes:

When rendering Jade templates I get 'variableName' undefined even when using -if(variableName) in the template.

Example (I'm using this as a partial for 'info' flash messages):

-if(info)
  - if(info.length){
   ul
   -info.forEach(function(info){
     li= info
  -})
-}

This returns 'info' is not defined instead of not rendering anything when there isn't a flash/info message. Does anyone know what I'm doing wrong?

I'm aware of the typeof(variable) != 'undefined option as mentioned. If I wanted to do something like -if (typeof(req.session.user) != 'undefined') I would have to do 3 nested `if (typeof(req) != 'undefined'. Is this my only option?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

﹏半生如梦愿梦如真 2024-11-09 21:48:39

尝试 if(typeof info !== "undefined")

我不太确定,但我认为他们使用 with 将变量注入到您的视图范围中。

with({}) {
    if (foo) {
         console.log("foo"); // fails foo is not defined.
    }
}

with({}) {
    if (typeof foo !== "undefined") {
         console.log("foo"); // no error
    }
}

try if(typeof info !== "undefined").

I'm not too sure but I think they use with to inject variables into the scope of your view.

with({}) {
    if (foo) {
         console.log("foo"); // fails foo is not defined.
    }
}

with({}) {
    if (typeof foo !== "undefined") {
         console.log("foo"); // no error
    }
}
一世旳自豪 2024-11-09 21:48:39

是的,大多数模板引擎将整个编译的模板函数包装在 with 语句中。可以通过在解析模板时考虑变量来做到这一点,但我认为几乎所有模板引擎都使用 with()。

一种解决方案是在渲染该模板时始终确保“信息”始终位于局部对象中。您可以通过显式将 info 设置为 undefined 或任何其他错误值来做到这一点。

var locals = { info: undefined, ... };

Yes, most templating engines wrap the entire compiled template function in a with statement. It is possible to do otherwise by taking the variables into account when parsing the template, but I think nearly all templating engines use with().

One solution would be to always make sure "info" is always in the locals object when rendering that template. You could do this by explicitly setting info to undefined or any other falsey value.

var locals = { info: undefined, ... };
转身以后 2024-11-09 21:48:39

只需指定变量值 IF 变量未定义:

input(name="company[name]" type="text",placeholder="Name",value="#{company.name || ''}")

simply specify the variable value IF variable undefined:

input(name="company[name]" type="text",placeholder="Name",value="#{company.name || ''}")
空袭的梦i 2024-11-09 21:48:39

而不是:

var params = {
    "info": [
        "a value"
    ]
};

-if(info)
  - if(info.length){
   ul
   -info.forEach(function(info){
     li= info
  -})
-}

使用:

var params = {
    "namespace": {
        "info": [
            "a value"
        ]
    }
};


-if(namespace.info)
  - if(namespace.info.length){
   ul
   -namespace.info.forEach(function(info){
     li= info
  -})
-}

由于“命名空间”将始终存在,并且您可以引用 Object.key 而不会出现“未定义”错误,因此这对您来说会更好。

-杰夫

instead of:

var params = {
    "info": [
        "a value"
    ]
};

-if(info)
  - if(info.length){
   ul
   -info.forEach(function(info){
     li= info
  -})
-}

use:

var params = {
    "namespace": {
        "info": [
            "a value"
        ]
    }
};


-if(namespace.info)
  - if(namespace.info.length){
   ul
   -namespace.info.forEach(function(info){
     li= info
  -})
-}

Since "namespace" will always exist, and you can reference Object.key without the "undefined" error, this will work better for you.

-jeff

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文