我为视频集合(几乎是视频信息列表)和规范集合(与视频集合直接相关的信息列表)设置了下标/发布。
简而言之,A Video属于一个Spec(aka:specialization),Spec可以有多个视频。
所以我有一个带有Specs列表的select。在change
我想加载与该规范对应的集合中的所有视频。
我的技巧是在检测到开启更改时简单地调用Meteor.subscribe("videos-pub-sub", $(evt.target).val());
。一旦使用正确的信息更新了集合,我就使用Session变量来更新我的模板。
然后是出版物的服务器端:
Meteor.publish("videos-pub-sub", function (spec){
console.log("Publishing videos...");
var res = [];
if(spec && spec > 0){
console.log("Spec not empty: " + spec)
res = Videos.find({spec: parseInt(spec)});
}else{
console.log("Spec not set...")
}
console.log("publication " + res.fetch().length);
return res;
});
相关HTML:
<select id="categories">
<option></option>
{{#each specs}}
<option value="{{id}}">{{name}}</option>
{{/each}}
</select>
<table id="video_table" class="table table-striped table-hover">
<thead>
<tr>
<th>ID</th>
<th>Name</th>
<th>Authors</th>
<th>Date Published</th>
<th>Abstract</th>
<th>Category</th>
<th>Private</th>
<th>Online</th>
<th>Upload</th>
</tr>
</thead>
<tbody id="video_tbody">
{{#each videos}}
<tr>
<td>{{id}}</td>
<td>{{title}}</td>
<td>{{authors}}</td>
<td>{{date_published}}</td>
<td>{{description}}</td>
<td class="category" data-id="{{spec}}">
{{specName}}
</td>
<td>
<input type="checkbox" aria-label="..." checked="{{#if private}}checked{{/if}}">
</td>
<td>{{#if online}}<span class="label label-success">Online</span>{{else}}<span class="label label-default">Offline</span>{{/if}}</td>
<td>
<input type="checkbox" checked="checked">
</td>
</tr>
{{/each}}
</tbody>
</table>
相关JS:
Template.List.events({
'change #categories':function(evt){
Meteor.subscribe("videos-pub-sub", $(evt.target).val());
console.log('Change #categories detected');
var vids = Videos.find({}).fetch();
console.log(vids);
Session.set("videos-session", Videos.find({}).fetch());
console.log(Session.get("videos-session"));
}
});
如果需要更多JS,我可以提供更多。
我对Meteor相对较新,我仍在努力了解事情是如何运作的。如果您看到我可以改进的任何内容,请告诉我。
答案 0 :(得分:1)
我在我的项目中看到,当在meteor上订阅/调用某些东西时,有时它会运行下一个代码行而没有收到预览服务器的答案,并且它会带来像你的一些问题。所以,我通常在subscribe / call函数中嵌套应该做的事情,然后只在返回数据后运行它。
我会做这样的事情:
SiteName
让我知道它是否有效!