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;