【问题标题】:Best practice for populating a form?填充表单的最佳实践?
【发布时间】:2011-08-26 02:52:56
【问题描述】:

我有一个 ejs 视图,其中包含我需要用数据填充的表单,以便可以编辑基础记录。我已将包含数据的对象传递给视图,现在看到了两种填充表单的方法,并且希望得到一些帮助来决定哪一种更好。

选项 1 - “服务器端”人口

我可以像这样将表单值直接放入元素中:

<input type="text" id="txtFirstName" name="txtFirstName" value="<%= person.firstName%>" />
<input type="text" id="txtLastName" name="txtLastName" value="<%= person.lastName%>" />
...
etc

选项 2 - “客户端”人口

或者,我可以将整个对象返回给客户端,然后使用 javascript 填充表单字段,如下所示:

<script>
   var data = "<%=JSON.stringify(person)%>".replace(/&quot;/gi, '"');
   var p = eval('(' + data + ')');
   populateForm(p);

   function populateForm (person) {
     $("#txtFirstName").val( person.firstName );
     $("#txtLastName").val( person.lastName );
     ....
     etc
  }
</script>

选项 2 的好处是,如果通过 ajax 加载新数据,则可以轻松地重用该函数来重新填充表单。它还消除了任何转义数据的需要,因为它已经全部在一个 js 对象中,而选项 1 需要某种类型的 html 编码和引号转义。另一方面,选项 1 可以在没有 js 的情况下使用。

是否有标准的、最佳实践的方式来做到这一点(并且是这些选项之一)?

【问题讨论】:

    标签: forms model-view-controller node.js ejs


    【解决方案1】:

    即使在不是绝对必要的情况下,我也会使用 ajax 加载数据并呈现模板客户端。这样,您的模型就会被加载到 javascript 控制器中并被泵入您的模板视图中。

    <script>
    $(function (){
      var person = null;
      $.getJSON('/person',function (data) {
        person = data;
        var form = new EJS({url: '/form.ejs'}).render(person);
        $('#formContainer').append(form);
      });
    });
    </script>
    

    【讨论】:

    • 我从来没有在客户端使用过 EJS。 form.ejs 只是表单本身的视图(有点像服务器端的部分视图)?
    • 另外,在渲染 form.ejs 时(按照您的建议通过 ajax),也会出现同样的困境! 或者通过js加载表单字段
    猜你喜欢
    • 1970-01-01
    • 2010-10-23
    • 2023-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多