2016-05-24 7 views
1

Mit SimpleSchema in Meteor mit den AutoForm + Select2-Plugins versuche ich, die Optionen für ein Select-Feld aus der Datenbank zu generieren.Füllen von SELECT-Optionen aus der Datenbank in SimpleSchema

Die Sammlung 'Beruf' wird veröffentlicht, und in Meteor wird eine Sammlung 'Beruf' definiert.

In SimpleSchema Ich habe dies: -

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

     } 
    } 
    }, 

Aber es um die Sammlung Ergebnisse nicht zurückgibt, und stürzt die Anwendung ohne eine Fehlermeldung.

Antwort

1

Es scheint der beste Weg, dies zu tun ist, die Liste der Optionen durch einen Helfer zu liefern.

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

Wo listOccupations ist ein Helfer in der Vorlage das Formular enthält.

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

Und wir entfernen Sie die Optionen Objekt aus dem Schena

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

Haben Sie versucht, diesen Ansatz:

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

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

    return occupations; 
    } 
} 

hoffe, das hilft ..

+0

ich so etwas wie dies versucht haben - aber die Asynchron-Betrieb bevölkern nicht die select sobald es gezeichnet wurde. Ich werde mit Ihrem Code testen – Andy59469

0

hatte ich die gleiche Problem. Ich definiere mein Sammlungsschema im Ordner/lib/collections, und zwar sowohl auf der Server- als auch auf der Clientseite. Die console.log, die ich hatte, druckte die richtigen Werte auf der Serverseite und ein leeres Array auf Clientseite. Was ich tat, war:

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; 
    } 
    }) 
} 

Ich weiß, dass die _schema verwendet, ist keine gute Idee, aber ich akzeptiere Anregungen :)

Verwandte Themen