流星订阅准备不起作用

时间:2016-08-02 18:33:38

标签: javascript meteor

我已经搜索并尝试了几个小时,但我无法为此找到任何解决方案。

我正在编写一个音乐应用程序,可以在服务器上播放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"
    }
});

在这里你可以看到,this.thumbnail上下文中的{{#with currentSong}}指的是存储缩略图及其高斯模糊版本的FS.File对象。

问题是,当模板已经加载并且它正在从一首歌切换到另一首歌时,它可以正常工作。但是当我的播放列表中没有歌曲时,显示部分是不可见的(模板在技术上是渲染的,但所有信息都在{{#with currentSong}}块内)。当我插入一首歌曲时,显示“弹出”并显示所有内容(歌曲标题,持续时间滑块等),缩略图除外。一旦我重新加载页面,它就在那里。

我订阅了这个系列。我查看天气订阅准备好了,但仍然无法正常工作。

我的应用程序中有一些其他部分,我在onCreated上下文中订阅,但仍然必须使用setTimeout (function(), 100),否则数据尚不可用。

我很确定问题出现在屏幕前,我遗漏了一些东西或者没有完全理解Meteor的订阅以及哪部分是被动的。但我只是不明白。非常感谢你的帮助。

需要注意的一点是,我了解iron-router及其功能。我在我的另一个项目中使用过它。但是这个应用程序是一个单页应用程序,根本不需要路由。所以我想限制使用它。

0 个答案:

没有答案
相关问题