我已经搜索并尝试了几个小时,但我无法为此提出任何解决方案。流星订阅已准备好不起作用
我正在写一个音乐应用程序,可以在服务器上播放来自YouTube的歌曲。我正在下载缩略图并将它存储在cfs:collection中(因为我稍后需要一个高斯模糊版本)。
我的发布方法如下所示:
Meteor.publish('currentSong', function() {
return [Playlist.find({'position': 0}), Thumbnails.find()];
});
我只出版了当前歌曲的缩略图版本,但造成更多的问题。
在我的模板onCreated方法我订阅(其他各种事情)。我已经尝试在this.autorun()
方法和一个之外。
Template.controlpanel.onCreated(function() {
// subscribe to the publications
Meteor.subscribe('currentSong');
Meteor.subscribe('status');
});
然后,我有一个模板帮助检索缩略图的URL实际上是一个<img src="<url>" />
上下文中显示出来:
getThumbnail: function() {
if(Template.instance().subscriptionsReady()){
var thumbnail = this.thumbnail.getFileRecord();
if(!$.isEmptyObject(thumbnail)){
return thumbnail.url({'store': 'Thumbnail'});
}
}
}
因为有人问我一些更多的代码,这里是一个片段从实际的模板
{{#with currentSong}}
<div id="ThumbnailDisplay">
<img src="{{getThumbnail}}" alt="{{title}} Thumbnail" id="thumbnail">
</div>
{{/with}}
凡currentSong只返回一个数据库条目,听下面的模式:
PlaylistSchema = new SimpleSchema({
title: {
type: String,
label: "titlename"
},
url: {
type: String,
label: "titleurl"
},
duration: {
type: Number,
label: "duration"
},
file: {
type: String,
label: "filepath",
optional: true
},
position: {
type: Number,
label: "postion"
},
// id to the Thumbnail CFS Collection object
thumbnail: {
// type: String,
type: FS.File,
label: "thumbnail"
}
});
在这里您可以看到,在{{#with currentSong}}
的上下文中的this.thumbnail
指的是存储缩略图及其高斯模糊版本的FS.File对象。
问题是,当模板已经加载并且从一首歌曲切换到另一首时,它没有任何问题。但是当我的播放列表中没有歌曲时,显示部分不可见(模板在技术上呈现,但所有信息都位于{{#with currentSong}}
块内)。当我插入歌曲时,显示屏会弹出并显示除缩略图以外的所有内容(歌曲标题,时长滑块等)。一旦我重新加载页面,它就在那里。
我正在订阅该集合。我查看订阅已准备就绪的天气,但仍无法使用。
我在我的应用程序中有一些其他部分,我在onCreated上下文中订阅,但仍然必须使用setTimeout (function(), 100)
,否则数据还不可用。
我很确定问题出在屏幕前,我错过了一些东西,或者没有完全理解Meteor的订阅以及哪部分是被动的。但我不明白。你的帮助将不胜感激。
有一点需要注意的是,我知道iron-router及其功能。我在另一个项目中使用过它。但这个应用程序是唯一的一个页面应用程序,根本不需要路由。所以我想限制使用它。
您可能需要展示更多代码才能找到问题。具体来说,你如何从一个数组中的两个不同的游标(相当奇怪的...)发布到this.thumbnail –
我已经编辑了这个问题来给你更多的代码。我希望这有帮助。出版物的哪一部分你觉得很奇怪?什么是适当的方式来做到这一点? – JHolub
您是否在控制台中发现任何错误?有时在这些情况下,我发现客户端由于错误而导致停止处理,因为变量未定义 - 例如this.thumbnail可能未定义getFileRecord()被调用的位置 –