2017-03-31 55 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