属性 数据库查询 - 未找到 userFunction
Property database query - userFunction is not found
我正在尝试按照 these instructions 查询模型的 属性 数据库。在本地开发服务器上测试时一切正常,但是当我将它部署到 firebase 时出现此错误:
Uncaught (in promise) {msg: "function 'userFunction' was not found."}
下面是我的代码:
const viewerHelperPlugin = {
install(Vue){
Vue.prototype.$viewerHelper = {
getElementsByPropertyValue: function (viewer, propertyName, propertyValue, operator) {
return new Promise(function(resolve, reject) {
function userFunction (pdb, userData) {
var attrIndex = -1;
// Iterate over all attributes and find the index to the one we are interested in
pdb.enumAttributes(function(i, attrDef, attrRaw){
var name = attrDef.name;
if (name === userData.propertyName) {
attrIndex = i;
return true; // to stop iterating over the remaining attributes.
}
});
// Early return is the model doesn't contain data.
if (attrIndex === -1)
return [];
var returnElements = [];
pdb.enumObjects(function(dbId) {
// For each part, iterate over their properties.
pdb.enumObjectProperties(dbId, function(attrId, valId){
if (attrId === attrIndex) {
var value = pdb.getAttrValue(attrId, valId);
if (userData.operator === "==" && value === userData.propertyValue) {
returnElements.push(dbId);
}
else if (userData.operator === ">" && value > userData.propertyValue) {
returnElements.push(dbId);
}
else if (userData.operator === ">=" && value >= userData.propertyValue) {
returnElements.push(dbId);
}
else if (userData.operator === "<" && value < userData.propertyValue) {
returnElements.push(dbId);
}
else if (userData.operator === "<=" && value <= userData.propertyValue) {
returnElements.push(dbId);
}
else if (userData.operator === "!=" && value != userData.propertyValue) {
returnElements.push(dbId);
}
}
});
});
return returnElements;
}
var thePromise = viewer.model.getPropertyDb().executeUserFunction( userFunction,
{propertyName: propertyName, propertyValue: propertyValue, operator: operator } );
thePromise.then(function(retValue){
resolve(retValue);
});
});
}
}
}
}
我不确定为什么它找不到我在语句上方声明的函数。
我相信我明白了。我在我的前端使用 Vue,当我将我的函数从 Vue 实例中拉出并进入全局 JavaScript 范围时,它起作用了。可能与 'userFunction' 名称要求有关? Vue 可能会在构建过程中将函数重命名为自己的格式。
我正在尝试按照 these instructions 查询模型的 属性 数据库。在本地开发服务器上测试时一切正常,但是当我将它部署到 firebase 时出现此错误:
Uncaught (in promise) {msg: "function 'userFunction' was not found."}
下面是我的代码:
const viewerHelperPlugin = {
install(Vue){
Vue.prototype.$viewerHelper = {
getElementsByPropertyValue: function (viewer, propertyName, propertyValue, operator) {
return new Promise(function(resolve, reject) {
function userFunction (pdb, userData) {
var attrIndex = -1;
// Iterate over all attributes and find the index to the one we are interested in
pdb.enumAttributes(function(i, attrDef, attrRaw){
var name = attrDef.name;
if (name === userData.propertyName) {
attrIndex = i;
return true; // to stop iterating over the remaining attributes.
}
});
// Early return is the model doesn't contain data.
if (attrIndex === -1)
return [];
var returnElements = [];
pdb.enumObjects(function(dbId) {
// For each part, iterate over their properties.
pdb.enumObjectProperties(dbId, function(attrId, valId){
if (attrId === attrIndex) {
var value = pdb.getAttrValue(attrId, valId);
if (userData.operator === "==" && value === userData.propertyValue) {
returnElements.push(dbId);
}
else if (userData.operator === ">" && value > userData.propertyValue) {
returnElements.push(dbId);
}
else if (userData.operator === ">=" && value >= userData.propertyValue) {
returnElements.push(dbId);
}
else if (userData.operator === "<" && value < userData.propertyValue) {
returnElements.push(dbId);
}
else if (userData.operator === "<=" && value <= userData.propertyValue) {
returnElements.push(dbId);
}
else if (userData.operator === "!=" && value != userData.propertyValue) {
returnElements.push(dbId);
}
}
});
});
return returnElements;
}
var thePromise = viewer.model.getPropertyDb().executeUserFunction( userFunction,
{propertyName: propertyName, propertyValue: propertyValue, operator: operator } );
thePromise.then(function(retValue){
resolve(retValue);
});
});
}
}
} }
我不确定为什么它找不到我在语句上方声明的函数。
我相信我明白了。我在我的前端使用 Vue,当我将我的函数从 Vue 实例中拉出并进入全局 JavaScript 范围时,它起作用了。可能与 'userFunction' 名称要求有关? Vue 可能会在构建过程中将函数重命名为自己的格式。