将ejs中的键值数组与组合选定值进行比较

时间:2017-10-24 14:40:26

标签: node.js ejs

我有一个路径js,我在这里定义了get函数:

exports.get = function (req, res) {
var calls = [{

    propertyTypes: function (acc) {
        return '/catalog/propertyTypes/';

    },

}];

    commercial_residential = {
        1 : 'Residencial',
        2 : 'Comercial'
    }

    property_types = [
        [
            [4  , "departamento"],
            [5  , "campo"],
            [8  , "casa"],
            [13 , "duplex"],
            [43 , "casa"],
            [47 , "departamento"],
            [49 , "campo"],
            [50 , "Terreno"],
            [53 , "departamento"],
            [63 , "ph"]
        ],[
            [1  , "Local"],
            [2  , "Quinta"],
            [3  , "Cochera"],
            [4  , "Galpon"],
            [5  , "emprendimiento"],
            [6  , "Lote"],
            [7  , "Oficina"],
            [9  , "Fondo de Comercio"],
            [10 , "Galpon"],
            [12 , "fondo de comercio"],
            [13 , "fondo de comercio"],
            [79 , "fondo de comercio"]
        ]
    ]

fetcher.getWithDependencies(calls, function (err, results) {
    var propertyTypes = (results.propertyTypes) ? results.propertyTypes : [];
[];

    fetcher.get('/ilist/importer/get/property/' + id, function (e, results) {
        res.render('ilist-importer/property', {
            'data': results,
            'list': {
                'propertyQR': propertyTypes,
                'propertyTypes': property_types,
            }
        });
    });
})
};

在我的get函数表单中,在ejs文件中我有一个组合,我显示所有property_types名称。表单提交时,我需要将选定值property_type name与来自route.js的键值数组propertyQR进行比较。 这是我的表格选择:

   <select name="comercial" id="comercial_form" class="span3">
              <option value="0">-Seleccione-</option>
                <% for(var i=0; i < list.propertyTypes[1].length; i++) { %>                            
                   <option value="<%= list.propertyTypes[1][i][1] %>">                          
                     <%= list.propertyTypes[1][i][1] %>
              </option>
                    <% } %>
                </select>

这是我到目前为止所拥有的。首先,我尝试将从route.js获取的PropertyQR数组复制到新的数组PropertyTypeID中,然后在表单提交时,我将表单中的选定值与我创建的键值数组名称字段进行比较,如果匹配则获取id字段。

  <script>

        $(function () {
  var propertyTypeID = [];

  for(var i=0; i< <%= list.propertyQR.length%>; i++){

            propertyTypeID.id.push(<%= list.propertyQR[i].id %>)

            propertyTypeID.name.push(<%= list.propertyQR[i].name %>)

            };

 $('#submit-import-form').click(function(){
    for(var i=0; i < propertyTypeID.length; i++){

                if (tipoPropiedad==propertyTypeID[i].name)

                    propertyTID=propertyTypeId[i].id;

                }
}
  });

    </script>

现在,当我尝试加载表单时,我得到了:

  

未捕获的TypeError:无法读取未定义的属性“push”

为什么会这样?请帮忙!!!!!

1 个答案:

答案 0 :(得分:2)

请记住,EJS代码正在服务器上运行,它会生成客户端JavaScript代码,该代码完全独立运行,而不了解您的EJS环境。您可以通过查看返回浏览器的内容来了解​​EJS生成的内容。

此代码有几个问题:

var propertyTypeID = [];

for(var i=0; i < <%= list.propertyQR.length%>; i++){

        propertyTypeID.id.push(<%= list.propertyQR[i].id %>)

        propertyTypeID.name.push(<%= list.propertyQR[i].name %>)

        };

propertyTypeID是一个数组,它没有idname属性,因此它们将是undefined。此外,变量i是在客户端定义的,而不是在服务器端EJS中定义的,因此像<%= list.propertyQR[i].id %>这样的代码无法访问i的值{39}。 ; s声明在它之上。通常这会引发错误,因为i未声明,但您还在第二个代码示例中声明了一个名为i的服务器端变量,我猜测的是i在这里使用。

我认为您尝试做的事情是这样的:

var propertyTypeID = [];

<% list.propertyQR.forEach(function(property) { %>
    propertyTypeID.push({
        id: <%- JSON.stringify(property.id) %>,
        name: <%- JSON.stringify(property.name) %>
    });
<% }); %>

这个循环是否必要,我不确定。您可能只能使用var propertyTypeID = <%- JSON.stringify(list.propertyQR) %>。这取决于你究竟想要做什么。

还有其他问题,例如propertyTypeID,length中的逗号。