gpt4 book ai didi

mongodb - 对如何调用模板渲染操作感到困惑

转载 作者:可可西里 更新时间:2023-11-01 10:44:03 24 4
gpt4 key购买 nike

每次用户输入所选歌曲时,我都试图让播放列表中的歌曲出现在屏幕上。我有以下操作将他们选择的歌曲插入数据库:

 Template.search_bar.events({
'keypress #query' : function (evt,template) {
// template data, if any, is available in 'this'
if (evt.which === 13){
var url = template.find('#query').value;
$("#query").val('');
$('#playlist_container').animate({scrollTop: $('#playlist_container')[0].scrollHeight});
Template.list.search_get(url,0); //insert records into the database
}
}

});

Template.list.search_get 将记录插入数据库:

Meteor.call('update_record',Template.list.my_playlist_id, song, function(err,message){});

在服务器端,我使用以下格式将记录推送到我的数据库中:

update_record: function(sessID, songObj){
Links.update({sess: sessID}, {$push: {songs: {song_title: songObj["title"], videoId: songObj["video_id"], thumbnail: songObj["thumbnail"], index: songObj["index"]}}});
},

基本上我所有的记录都是这样的格式:

{_id:,
sess:,
songs: [{song_title:,
videoId:,
thumbnail:,
index:},
{song_title:,
videoId:,
thumbnail:,
index:},...]
}

记录的歌曲字段中的一组歌曲对象。我想做的是每次用户点击搜索按钮时,让新歌曲出现在列表中。 我不确定渲染函数被调用了多少次或者模板如何在 hmtl 中渲染数据库对象。目前我的列表有以下 html 模板:

<template name="list">
<div id="playlist_container">
<ul id="playlist">
{{#each my_playlist.songs}}
{{> track}}
{{/each}}
</ul>
</div>

我相信 my_playlist 应该在客户端调用以下操作:

  Template.list.my_playlist = function(){
console.log("myplaylist is called");
return Links.findOne({sess: Template.list.my_playlist_id});
}

它应该返回一个包含歌曲对象数组的对象,我在#each my_playlist.songs 中对其进行迭代,它应该呈现以下每个轨道模板:

<template name="track">
<li id="{{index}}" class="list_element">
<div class="destroy"> </div>
<div class="element_style">{{song_title}}</div>
</li>
</template>

但是,成功插入记录后,我没有看到新歌名出现。关于我如何处理这个问题有什么建议吗?

最佳答案

这段代码就是问题所在。

Template.list.my_playlist = function(){
return Links.findOne({sess: Template.list.my_playlist_id});
}

Template.list.my_playlist_id 从不更新,因此,新模板从不呈现。

试试这个方法。

if (Meteor.isServer) {
Meteor.methods({
update_record: function(sessID, songObj){
// update Links
return Links.findOne({sess: sessID});
}
});
} else {
Meteor.call('update_record',Template.list.my_playlist_id, song, function(err, song){
Session.set('playlist', song);
});
Template.list.my_playlist = function(){
return Session.get('playlist');
}
}

关于mongodb - 对如何调用模板渲染操作感到困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20709308/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com