我正在开发一个node.js应用程序。我在app.js中将JSON文件加载为app.locals.parameter。 然后我试图在index.hbs中使用它。
假设:
app.locals.componentData = require('./myfile.json');
当我在下面的HTML部分中使用参数时,它可以正常运行。
{{#each componentData.categories}}
<li id="{{this.categoryName}}" name="{{this.categoryName}}" class="btn btn-primary btn-sm" style="position: relative; z-index: 10; margin-bottom:3px" draggable="true" role="option" aria-grabbed="false"><div><img src="images/plugin.png" alt="{{this.categoryDescription}}"/>{{this.categoryName}}</div></li>
{{/each}}
但是当我尝试在我的javascript函数中使用参数时,它无法识别它。
function InitComponents() {
for( var i = 0; i < componentData.categories.length; i++ ){
alert("in loop!"+i+"-"+componentData.categories[i].categoryName);
if(componentData.categories[i].categoryName.match(itemId)){
alert("here:"+componentData.categories[i].parameters.length);
createParameterList(newID,componentData.categories[i].parameters);
}
}
}
我的JSON格式如下:
{
"categoryName": "xyz",
"categories": [
{
"categoryName": "ABC",
"parameters": [
{
"ParameterID": "ID",
"ParameterName": "ID",
"ParameterDefultValue": "",
"ParameterValue": "",
"ParameterDescription": "ID Description"
}]
}]
}
我可以知道为什么系统无法理解 componentData.categories.length 在我的脚本部分?
答案 0 :(得分:1)
这里的问题是for (var i = 0; i < Object.keys(data).length; i++) {
console.log(JSON.stringify(data.quote.symbol));
}
函数对InitComponents
一无所知。 app.locals
变量可在模板中识别。为了使代码正常工作,您需要将app.locals
作为参数传递给app.locals.componentData
函数:
InitComponents
现在您可以像这样调用此函数
function InitComponents(componentData) {
for( var i = 0; i < componentData.categories.length; i++ ){
alert("in loop!"+i+"-"+componentData.categories[i].categoryName);
if(componentData.categories[i].categoryName.match(itemId)){
alert("here:"+componentData.categories[i].parameters.length);
createParameterList(newID,componentData.categories[i].parameters);
}
}
}
和InitComponents(app.locals.componentData);
现在将真正知道InitComponents
是什么。
如果您在中间件中使用此功能,则可以通过componentData
访问app
:
req.app