我有一个路径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”
为什么会这样?请帮忙!!!!!
答案 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
是一个数组,它没有id
和name
属性,因此它们将是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
中的逗号。