Meteor - select 元素选项加载函数总是返回未定义
Meteor - select element options loading function always returning undefined
我在我的 Meteor 项目中使用 Autoform 包,我试图动态加载 select 元素的选项,如下所示。即使 convertToObj 函数 returns select 选项正确如下面 console.log 中测试的那样,select 框中未填充选项选项,有人可以告诉我我是什么可能在这里丢失/做错了吗?谢谢
var convertToObj = function(arrayObj, callbackFn){
var customerOptions = [];
arrayObj.forEach(function(optionName){
customerOptions.push( {label: optionName.name, value: optionName.value} );
});
callbackFn(customerOptions);
}
customerOpt:{
type: String,
label: "Customer Options",
optional: true,
autoform: {
type: "select",
options: function(){
if (Meteor.isClient) {
var docId = '';
docId = AutoForm.getFieldValue('customer');
if(docId){
var customerRecordCount = Customers.find({_id:docId, customerOptions:{$exists:true}}).count();
if( customerRecordCount > 0){
Customers.find({_id: docId}).map(function (c) {
convertToObj(c.customerOptions, function(result){
console.log(result); //Prints OK!
return result;
});
});
}else{
return {};
}
}
}
}
}
},
我可能错了,但从我的角度来看,您正在使用异步回调调用 convertToObj。所以在 if (docId)
和 customerRecordCount > 0
的情况下,你不需要 return 任何东西(未定义)。
return result
的语句不是您的 options: function()
块的结果。
对于第一次调试测试,只需 return { valid values }
即可看到 select 框已正确填充。
更新:
你应该return一个像这样的有效数组:
options: [
{label: "hello", value: 123},
{label: "world!", value: "world"}
]
或
options: function() {
return [
{label: "hello", value: 123},
{label: "world!", value: "world"}
]
}
更新 2:
var selectOptions = []
var customerRecord = Customers.findOne({_id:docId})
if (customerRecord) {
_.each(customerRecord.customerOptions, function(opt) {
selectOptions.push({label: opt.name, value: opt.value});
})
}
return selectOptions;
我在我的 Meteor 项目中使用 Autoform 包,我试图动态加载 select 元素的选项,如下所示。即使 convertToObj 函数 returns select 选项正确如下面 console.log 中测试的那样,select 框中未填充选项选项,有人可以告诉我我是什么可能在这里丢失/做错了吗?谢谢
var convertToObj = function(arrayObj, callbackFn){
var customerOptions = [];
arrayObj.forEach(function(optionName){
customerOptions.push( {label: optionName.name, value: optionName.value} );
});
callbackFn(customerOptions);
}
customerOpt:{
type: String,
label: "Customer Options",
optional: true,
autoform: {
type: "select",
options: function(){
if (Meteor.isClient) {
var docId = '';
docId = AutoForm.getFieldValue('customer');
if(docId){
var customerRecordCount = Customers.find({_id:docId, customerOptions:{$exists:true}}).count();
if( customerRecordCount > 0){
Customers.find({_id: docId}).map(function (c) {
convertToObj(c.customerOptions, function(result){
console.log(result); //Prints OK!
return result;
});
});
}else{
return {};
}
}
}
}
}
},
我可能错了,但从我的角度来看,您正在使用异步回调调用 convertToObj。所以在 if (docId)
和 customerRecordCount > 0
的情况下,你不需要 return 任何东西(未定义)。
return result
的语句不是您的 options: function()
块的结果。
对于第一次调试测试,只需 return { valid values }
即可看到 select 框已正确填充。
更新:
你应该return一个像这样的有效数组:
options: [
{label: "hello", value: 123},
{label: "world!", value: "world"}
]
或
options: function() {
return [
{label: "hello", value: 123},
{label: "world!", value: "world"}
]
}
更新 2:
var selectOptions = []
var customerRecord = Customers.findOne({_id:docId})
if (customerRecord) {
_.each(customerRecord.customerOptions, function(opt) {
selectOptions.push({label: opt.name, value: opt.value});
})
}
return selectOptions;