2017-03-31 4 views
1

Ich habe eine Meteor-Anwendung und ich habe das Plugin colorpicker als Komponente hinzugefügt. Aber ich möchte es mit einem Wert in einer MongoDB-Sammlung zu initialisieren. Also initialisiere ich den Eingabetext (etwas wie #32a214), aber ich weiß nicht, wie man die Farbe in dem kleinen Quadrat in der rechten initialisiert.Initialize Bootstrap Colorpicker mit MongoDB Daten

In meiner html-Datei Ich habe:

<div class="form-group"><label class="col-sm-2 control-label">Color text image<br/></label> 
    <div class="col-sm-10"> 
     <div id="colorText" class="input-group colorpicker-component"> 
      <input type="text" value={{textImageColor}} id="textImageColor" placeholder="Choose a color" class="form-control" /> 
      <span class="input-group-addon"><i></i></span> 
     </div> 
    </div> 
</div> 

In meiner JavaScript-Datei, die ich habe:

Template.yourTile.rendered = function(){ 

    $('#colorText').colorpicker({ 
     color: "#32a214" 
    }); 
} 

Deshalb mag ich "# 32a214" mit einem Wert aus der Datenbank ersetzen. Ich möchte so etwas tun:

color: {{textImageColor}} 

Aber es funktioniert nicht. Also, weißt du, wie ich es machen kann?

EDIT:

Ich habe einen JavaScript-Code auf der Serverseite:

Meteor.publish('tiles', function(){ 
    return tiles.find(); 
}); 

Und ich bekomme die Daten mit einem Helfer:

Template.yourTile.helpers({ 
    'textImageColor': function(){ 
     var userID = Meteor.userId(); 
     var doc = tiles.findOne({createBy: userID }); 
     var textImageColor = doc && doc.textImageColor; 
     if(textImageColor == ""){ 
      return ""; 
     }else{ 
      return textImageColor; 
     } 
    } 
} 

Also, wenn ich {{textImageColor}} nennen in einer html-Datei funktioniert es, aber nicht in der Javascript-Datei. Ich denke, es ist vielleicht wegen der Belastung. Die Farbe wird im gerenderten Objekt initialisiert. Wenn ich also die Farbe durch {{textImageColor}} ersetze, funktioniert das nicht, weil der Wert noch nicht aus der mongoDB-Sammlung geladen wurde. Vielleicht muss ich warten, um den Wert zu haben, aber ich weiß nicht, wie ich es machen soll.

+1

Haben Sie einen Servercode, der diesen Wert aus der Datenbank liest und ihn entweder über eine Meteor-Methode oder durch Veröffentlichung bereitstellt? – zim

+0

Ich bearbeite meine Frage. Also habe ich einen Servercode, der den Wert aus der Datenbank liest und veröffentlicht. Also wie ich in der Bearbeitung sagte, vielleicht liegt es daran, dass der Wert noch nicht geladen ist. Wissen Sie, was ich meine und wie es geht? – Adrien

+0

Verfügen Sie über Code auf dem Client, der die Daten abonniert, und über den gleichen Code auf dem Client und dem Server, der die Variable für die Sammlung einrichtet? – zim

Antwort

0

eine erfolgreiche pub/sub zu tun, müssen Sie alle folgende:

  1. Sammlung mit Daten in db
  2. eine Sammlung Definition gemeinsam an den Client und Server-Code
  3. ein Verlag auf dem Server
  4. ein Teilnehmer auf dem Client
  5. ein Fund() auf dem Client

sieht aus, als ob du # 2 vermisst.

In einem allgemeinen Code (z. B. /collections/tiles.js) müssen Sie die Sammlung definieren. z.B.

tiles = new Mongo.Collection('tiles'); 

Wenn auf dem Server ausgeführt wird, wird sichergestellt, dass die Auflistung in der DB vorhanden ist. Auf dem Client wird eine Mini-Mongo-Instanz für diese Sammlung erstellt, mit der die clientseitige Suche() ausgeführt wird. Es wird auch eine Referenz "Kacheln" zu diesen Sammlungen erstellt.

+0

Ich habe das auch! Ich habe vergessen, die Frage einzugeben, aber ich habe es in meinem Code in Sammlungen/KachelnDetails.js. Also, ich glaube nicht, dass das Problem daraus entsteht. – Adrien

+0

Können Sie den gesamten Code posten? – zim

+0

Sie können auch das Meteorspielzeug (https://atmosphherejs.com/meteoToys/allthings) installieren, um zu sehen, ob Ihr Abonnement auf dem Client noch aktiv ist. Wenn nicht, dann wird das clientseitige find() nichts zurückgeben. – zim