【问题标题】:Initialize Bootstrap colorpicker with mongoDB data使用 mongoDB 数据初始化 Bootstrap 颜色选择器
【发布时间】:2017-03-31 22:54:52
【问题描述】:

我有一个流星应用程序,我添加了插件colorpicker 作为组件。 但我想用一个 MongoDB 集合中的值来初始化它。 所以我初始化了输入文本(类似于#32a214)但是我不知道如何初始化右边小方块的颜色。

在我的 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;
        }
    }
}

因此,如果我在 html 文件中调用 {{textImageColor}},它可以工作,但不能在 javascript 文件中。 我想这可能是因为加载。颜色在渲染中被初始化,所以如果我用{{textImageColor}} 替换颜色,它不起作用,因为该值尚未从 mongoDB 集合中加载。所以也许我需要等待获得价值,但我不知道该怎么做。

【问题讨论】:

  • 您是否有任何服务器代码从数据库中读取该值并通过 Meteor 方法或发布它使其可用?
  • 我编辑我的问题。所以我有一个服务器代码,它从数据库中读取值并发布它。所以就像我在编辑中说的那样,也许是因为该值尚未加载。你知道我的意思以及怎么做吗?
  • 您在客户端上是否有订阅数据的代码,以及在客户端和服务器上为集合设置变量的相同代码?
  • 我有一个订阅文件:Meteor.subscribe('tiles');,我在助手中设置了变量。我使用的所有代码都在问题和订阅文件中。我什么都没有了。

标签: javascript mongodb meteor color-picker


【解决方案1】:

要成功发布/订阅,您需要以下所有条件:

  1. 在 db 中收集数据
  2. 客户端和服务器代码通用的集合定义
  3. 服务器上的发布者
  4. 客户端上的订阅者
  5. 客户端上的 find()

看来您缺少 #2。

在一些通用代码(例如 /collections/tiles.js)中,您需要定义集合。例如

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

在服务器上运行时,它将确保集合存在于数据库中。在客户端上,它将为客户端 find() 运行的那个集合创建一个 mini-mongo 实例。它还将创建对这些集合的引用“tiles”。

【讨论】:

  • 我也有这个!我忘了提出这个问题,但我在 collections/tilesDetails.js 中的代码中有它。所以,我认为问题不在于这个。
  • 您也可以安装流星玩具 (atmospherejs.com/meteortoys/allthings) 以查看您的订阅在客户端是否仍然有效。如果没有,那么客户端 find() 将不会返回任何内容。
  • 所以,就像我之前说的,所有从数据库中获取值的过程都在工作。我认为问题出在加载。它在从数据库中获取值之前初始化颜色选择器。因此,我更改了颜色选择器插件中的 html 代码以传递颜色:&lt;span class="input-group-addon"&gt;&lt;i style="background-color: {{textImageColor}};"&gt;&lt;/i&gt;&lt;/span&gt;。所以,现在它起作用了!感谢您的帮助!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-07-24
  • 1970-01-01
  • 2021-06-12
  • 1970-01-01
  • 1970-01-01
  • 2014-06-28
  • 2018-03-12
相关资源
最近更新 更多