Заполнение параметров SELECT из базы данных в SimpleSchema

Используя SimpleSchema в Meteor с плагинами AutoForm + Select2, я пытаюсь создать параметры для поля Select из базы данных.

Коллекция «оккупация» опубликована, и коллекция «оккупация» определена в Meteor.

В SimpleSchema у меня есть это: -

occupations: {
    type: [String],
    optional:true,
    label: 'Occupation',
    autoform:{
      type:"select2",
      placeholder: 'Comma spaced list of occupations',
      options: function () {
        Meteor.subscribe('occupations');
        return Occupations.find({});

      }
    }
  }, 

Но он не возвращает результаты сбора и вылетает приложение без сообщения об ошибке.


person Andy59469    schedule 24.05.2016    source источник


Ответы (3)


Кажется, лучший способ справиться с этим - предоставить список опций через помощника.

{{> afQuickField name='occupations' multiple=true tags=true options=listOccupations}}

Где listOccupations — помощник в шаблоне, содержащем форму.

Template.myForm.helpers({
  listOccupations: function () {
    Meteor.subscribe('occupations');
    return Occupations.find({}).fetch();
  }
});

И убираем объект options из схемы

occupations: {
    type: [String],
    optional:true,
    label: 'Occupation',
    autoform:{
      type:"select2",
      placeholder: 'Comma spaced list of occupations',
    }
  },
person Andy59469    schedule 24.05.2016

Вы пробовали этот подход:

autoform: {
  options: {
    var occupations  = [];

    Occupations.find().map(function(occ) {
       occupations.push(
         {label: occ.description, value: occ._id}
       );
    });

    return occupations;
  }
}

надеюсь это поможет..

person ickyrr    schedule 03.06.2016
comment
я пробовал что-то вроде этого, но асинхронная операция не заполнила выбор после того, как он был нарисован. я проверю, используя ваш код - person Andy59469; 04.06.2016

Я была такая же проблема. Я определяю свою схему коллекций в папке /lib/collections, и она работает как на стороне сервера, так и на стороне клиента. Учитывая это, console.log, который у меня был, печатал правильные значения на стороне сервера и пустой массив на стороне клиента. Я сделал следующее:

if (Meteor.isClient){
Meteor.subscribe('service-categories-list', {
    onReady: function(){
        const serviceCategories = ServiceCategories.find({}).map(function(item, index) { 
            return {
                label: item.name, 
                value: item.slug
            };
        });
        Schema2._schema.type.autoform.options = serviceCategories;
    }
  })
}

Я знаю, что использовать _schema не очень хорошая идея, но я принимаю предложения :)

person VeYroN    schedule 09.01.2018