我正在使用上面的包创建一个标签系统。我使用了上面链接中<select multiple>
的{{1}},并在True Input Value
内将每个代码插入Strings
。
这就是我的数据库的样子。
tag array
所以我的问题是...... 我想将帖子中的所有标签返回到以下格式,以便我可以在用户尝试编辑帖子时重复使用它来显示标签。
通缉格式
Posts
tags //Array
[0] : sometag //String
[1] : sometag //String
[2] : sometag //String
//and so forth..
这是我到目前为止所做的。
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
这样的事情。也许我的英语理解不符合标准,但是流星的文件确实没有不能帮助我更好地理解。
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?
答案 0 :(得分:1)
在调用Template.postEdit.rendered时,您的变量myTags未定义是正确的,因为在调用函数时Posts数据库尚未完成加载。
myTags = Posts.findOne({_id: this._id}).tags.fetch(); //AAA
<强>解决方案强>
有多种策略,包括:
订阅完成后更新DOM http://docs.meteor.com/#/full/Blaze-TemplateInstance-subscribe
收集更改时重新运行该功能 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}}