2017-03-31 27 views
1

我有一個流星應用程序,並添加了插件colorpicker作爲組件。 但我想用一個MongoDB集合中的值來初始化它。 所以我初始化輸入文本(類似#32a214),但我不知道如何初始化在右邊的小廣場的顏色。使用mongoDB數據初始化引導程序colorpicker

在我的HTML文件我有:

<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> 

在我的JavaScript文件,我有:

Template.yourTile.rendered = function(){ 

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

所以我想從數據庫中值來代替 「#32a214」。 我願做這樣的事情:

color: {{textImageColor}} 

但它不工作。所以,你知道我該怎麼做嗎?

編輯:

我對服務器端JavaScript代碼:

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

,我和一個助手獲取數據:

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

所以,如果我叫{{textImageColor}}在一個html文件中,它可以工作,但不在JavaScript文件中。 我想這可能是因爲加載。顏色在渲染時初始化,所以如果我用{{textImageColor}}替換顏色,它不起作用,因爲值尚未從mongoDB集合中加載。所以也許我需要等待有價值,但我不知道該怎麼做。

+1

您是否有任何服務器代碼正在從數據庫中讀取該值,並通過Meteor方法或通過發佈它來使其可用? – zim

+0

我編輯我的問題。所以我有一個服務器代碼,它讀取數據庫中的值併發布它。 所以就像我在編輯中所說的,也許是因爲這個值還沒有加載。 你知道我的意思嗎?怎麼做? – Adrien

+0

您是否在訂閱數據的客戶端上具有代碼,並且在爲客戶端和服務器設置相同的代碼以設置該集合的變量? – zim

回答

0

做一個成功的pub/sub,您需要以下所有的:

  1. 收集的數據在DB
  2. 共同客戶端和服務器端的代碼
  3. 上發佈的集合定義在客戶端服務器
  4. 客戶端上的用戶
  5. 一個發現()

它看起來像你缺少#2。

在一些常見的代碼中(例如/collections/tiles.js),您需要定義集合。例如

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

當在服務器上運行時,它會確保集合存在於db中。在客戶端上,它將爲客戶端find()運行的那個集合創建一個mini-mongo實例。它也會爲這些集合創建一個參考「tiles」。

+0

我也有這個!我忘記了這個問題,但我在我的代碼中收藏/ tilesDetails.js。 所以,我不認爲問題來自於此。 – Adrien

+0

你能發表所有相關的代碼嗎? – zim

+0

您還可以安裝流星玩具(https://atmospherejs.com/meteortoys/allthings)以查看您的訂閱是否仍然在客戶端處於活動狀態。如果沒有,那麼客戶端find()將不會返回任何內容。 – zim

相關問題