【问题标题】:Node : How to display value to an input only if there is a value节点:仅当有值时如何向输入显示值
【发布时间】:2019-09-20 05:42:25
【问题描述】:

添加和更新发生在同一个页面上,所以最初所有的输入都是空的,当从显示页面点击数据时,特定id的所有数据都应该显示在所有输入上。 但是当我尝试使用三元运算符 if condition 时,它似乎不起作用。

EJS

<input
  type="text"
  class="form-control"
  name="landingTitle"
  value="<% result ? <%= result.landingTitle %> : '' %>" />

后台

Node

// Initial Render
router.get("/", (req, res) => {
  res.render("pages/dashboard");
});

//When the data is clicked for updation
router.get("/display/:id", (req, res) => {
  MongoClient.connect(
    process.env.ATLAS_URI,
    { useNewUrlParser: true },
    (err, db) => {
      if (err) throw err;
      const dbo = db.db("xxx");
      dbo
        .collection("xxx")
        .findOne({ _id: topic_id }, (err, result) => {
          if (err) throw err;
          res.render("pages/dashboard", {
            result
          });
          db.close();
        });
    }
  );
});

我在这里做错了什么?任何建议将不胜感激,谢谢

【问题讨论】:

  • 您遇到的错误是什么?如果您单击 UI 上的某些内容并使用 Ajax 调用加载数据,那么是的,它不会工作,因为 ejs 仅在服务器端呈现一次。
  • 我没有使用 ajax,我直接使用 ejs 从后端附加值。这是我得到的错误 - 找不到匹配的关闭标签“

标签: node.js mongodb ejs


【解决方案1】:

我认为您这里有语法问题,请尝试以下方法,看看是否可行

value="<% if(result) { %> <%= result.landingTitle %> <% } else { %> '' <% } %>"

如果您可以使用非内联版本,您可以随时执行以下操作

<%
 var value = (result && result.landingTitle)? result.landingTitle : '';
%>


<input
  type="text"
  class="form-control"
  name="landingTitle"
  value="<%= value %>" 
/>

【讨论】:

  • 哇,这解决了语法问题,但现在我得到 - 结果未定义 - 错误。因为在初始页面加载中我没有传递结果,但是点击更新时我才传递它,那么我将如何解决这个问题
  • 这就是我要问的问题,如果您在用户操作中获得结果,那么这发生在客户端,您需要在客户端编写 js 来进行调用并填写价值。
【解决方案2】:

还有一种更简单干净的方法。检查结果是否在条件运算符中使用locals 对象定义。

<input
    type="text"
    class="form-control"
    name="landingTitle"
    value="<%= locals.result ? result.landingTitle  : '' %>" 
/>

无论您是否渲染 result 对象,它都会起作用。

【讨论】:

    猜你喜欢
    • 2022-06-22
    • 2022-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-07
    • 2019-09-27
    • 2017-09-15
    相关资源
    最近更新 更多