从meteor mongo返回数组

时间:2015-04-02 17:09:28

标签: javascript jquery arrays mongodb meteor

ajduke:bootstrap-tagsinput

我正在使用上面的包创建一个标签系统。我使用了上面链接中<select multiple>的{​​{1}},并在True Input Value内将每个代码插入Strings

这就是我的数据库的样子。

tag array

所以我的问题是...... 我想将帖子中的所有标签返回到以下格式,以便我可以在用户尝试编辑帖子时重复使用它来显示标签。

通缉格式

Posts
    tags              //Array
        [0] : sometag //String
        [1] : sometag //String
        [2] : sometag //String
                      //and so forth..


EDIT1

这是我到目前为止所做的。

Post_Edit.js

['sometag', 'sometag', 'sometag', and so forth]

我已尝试过Template.postEdit.rendered = function() { myTags = Posts.findOne({_id: this._id}).tags.fetch(); //AAA $('.tagsinput').tagsinput('add', myTags); //From above link API } 行的其他方法,但我没有运气。我尝试了//AAA这样的事情。也许我的英语理解不符合标准,但是流星的文件确实没有不能帮助我更好地理解。

编辑2

Posts.findOne.map... 我已经尝试将它放在浏览器控制台中,并以我想要的格式获得数组。

但问题是,当我使用它时,它在我的应用程序中无效。

当我在postEdit.rendered中使用Posts.findOne({_id: "ziZw3wLaxFyz3DYP4"}).tags时,我收到此浏览器控制台错误。 Posts.findOne({_id: this._id}).tags Post_Edit.js

Cannot read property 'tags' of undefined

我不明白为什么它在浏览器控制台中工作而不是我的Template.postEdit.rendered?

2 个答案:

答案 0 :(得分:1)

在调用Template.postEdit.rendered时,您的变量myTags未定义是正确的,因为在调用函数时Posts数据库尚未完成加载。

myTags = Posts.findOne({_id: this._id}).tags.fetch(); //AAA

<强>解决方案
有多种策略,包括:

  1. 订阅完成后更新DOM http://docs.meteor.com/#/full/Blaze-TemplateInstance-subscribe

  2. 收集更改时重新运行该功能 http://docs.meteor.com/#/full/tracker_autorun

    Template.postEdit.rendered = function() {
       Tracker.autorun(function () {  ** NEW LINE **
          myTags = Posts.findOne({_id: this._id}).tags; 
    
          $('.tagsinput').tagsinput('add', myTags); 
       } ** NEW LINE **
    }
    

答案 1 :(得分:0)

我已经采用了一种完全不同的方式来解决这个问题。 但我仍然想知道为什么我的方法不起作用......

<强> post_edit.js

Template.postEdit.helpers({
    tags: function(){
        Posts.findOne({_id:this._id}).tags;
    }
});

<强> post_edit.html

<select class=tagsinput id="tagsinput" data-role="tagsinput">
    {{#each}}
        <option value="{{this}}">{{this}}</option>
    {{/each}}