流星蒙戈的返回阵列

Return arrays from meteor mongo

本文关键字:返回 阵列 流星      更新时间:2023-09-26

ajduke:bootstrap tagsinput

我正在使用上面的包来创建一个标签系统。我使用了来自上面链接的True Input Value<select multiple>,并将每个标签作为Strings插入到tag array中。

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

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

所以我的问题是。。。我想将帖子中的所有标签返回到以下格式,这样当我的用户试图编辑他们的帖子时,我就可以重用它来显示标签。

想要的格式

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

第1版

这就是我迄今为止所做的。

Post_Edit.js

Template.postEdit.rendered = function() {
    myTags = Posts.findOne({_id: this._id}).tags.fetch(); //AAA
    
    $('.tagsinput').tagsinput('add', myTags); //From above link API
}

我已经尝试过//AAA线的其他方法,但我没有运气。我试过Posts.findOne.map...之类的东西。也许我的英语理解能力达不到标准,但《流星》中的文档并没有帮助我更好地理解。

编辑2

Posts.findOne({_id: "ziZw3wLaxFyz3DYP4"}).tags我试着把它放在浏览器控制台中,并得到了我想要的格式的数组。

但问题是,当我使用它时,它在我的应用程序中不起作用。

当我在postEdit.rendered中使用Posts.findOne({_id: this._id}).tags时,我会收到这个浏览器控制台错误。Cannot read property 'tags' of undefinedPost_Edit.js

Template.postEdit.rendered = function() {
    myTags = Posts.findOne({_id: this._id}).tags;
    
    $('.tagsinput').tagsinput('add', myTags); //From above link API
}

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

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

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

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

  1. 订阅完成后更新DOM
    http://docs.meteor.com/#/full/Blaze-模板实例订阅

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

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

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