我在Iron-Router中设置了两条路线:' home' (所有帖子的分页列表)和' doc' (详细视图)。主页加载得很好,但只有先前查看过主页才能加载详细视图。否则它将呈现为空 - 并且它不能用作永久链接。
这将始终加载: http://localhost:3000/
这只会在家庭使用时加载。之前已被查看过: http://localhost:3000/doc/tZFawq8cgf43hZBaJ
路线:
Router.map(function() {
this.route('home', {
path: '/'
});
this.route('doc', {
path: '/doc/:_id',
data: function() {
return MyPix.findOne({_id: this.params._id});
}
});
});
文档模板:
<template name="doc">
<h1>{{this.name}}</h1>
<img src="{{ this.url store='OriginalRetinaPix' }}" width="{{ this.metadata.width }}" height="{{ this.metadata.height }}" />
</template>
发布/订阅:
Meteor.publish('MyPix', function(cursor) {
Counts.publish(this, 'numberOfPosts', MyPix.find(), { noReady: true });
return MyPix.find({}, {sort: {uploadedAt: -1}, limit: 4, skip: cursor});
});
if(Meteor.isClient) {
Session.setDefault('docCursor', 0);
console.log('docCursor: ' + Session.get('docCursor'));
Meteor.autorun(function(){
Meteor.subscribe('MyPix', Session.get('docCursor'));
})
}
btw:GitHub
上的项目答案 0 :(得分:1)
在“doc”路线上,您应该使用waitOn
以便在页面加载时准备好数据。在Router.configure
中添加加载模板
我建议您升级到新的iron:router
路由声明,并添加meteorhacks:subs-manager
以便在订阅上获得更好的缓存。
这是一个适用于你的案例的例子
var subs = new SubsManager();
Router.route('/doc/:_id', {
name: 'doc',
template: 'doc',
waitOn: function() {
return subs.subscribe('aPix', this.params._id);
},
data: function() {
return {
apix: MyPix.findOne({
_id: this.params._id
})
};
}
});
并在服务器端创建publications.js
Meteor.publish('aPix', function(id) {
check(id, String);
return MyPix.find(id);
});
答案 1 :(得分:1)
使用此功能。
Router.map(function() {
this.route('home', {
path: '/'
});
this.route('doc', {
path: '/doc/:_id',
waitOn: function(){
return Meteor.subscribe('MyPix');
},
data: function() {
return MyPix.findOne({_id: this.params._id});
}
});
});
此外,您的订阅应该如下所示。
Meteor.publish('MyPix', function(cursor) {
//Counts.publish(this, 'numberOfPosts', MyPix.find(), { noReady: true });
return MyPix.find({});
});
另外,添加meteor add sacha:spin
,因为当你有很多人时,订阅会有一点延迟。
将此添加到每条路线。
loadingTemplate: "loading"
<template name="loading">
{{> spinner}}
</template>
Router.onBeforeAction("loading");
如果你在'home'
上显示100多张图片并且有人进入并且连接速度很慢,他会认为页面加载为空,或者其他内容。
答案 2 :(得分:0)
您只订阅了所有文档的子集。如果您直接转到/doc/tZFawq8cgf43hZBaJ
,则标识为tZFawq8cgf43hZBaJ
的文档可能不属于您在客户端上收到的文档子集。
注意:如果这个答案是正确的,您应该可以直接转到/doc/<id>
以获取首页显示在主页上的文档(在第一页上,当会话变量docCursor
是0
)。