Meteor 重新呈现模板不会';t不允许我永久更改元素';什么课?
我有一个可排序的列表Meteor 重新呈现模板不会';t不允许我永久更改元素';什么课?,meteor,Meteor,我有一个可排序的列表 <template name="the_playlist"> {{#each main_list}} <li id="{{index}}" class="list_element"> <div class="next_song">...</div> <div class="destroy">...</
<template name="the_playlist">
{{#each main_list}}
<li id="{{index}}" class="list_element">
<div class="next_song">...</div>
<div class="destroy">...</div>
<div class="element_style">{{song_title}}</div>
</li>
{{/each}}
</template>
我使用的是可排序插件,更重要的是它的update
回调,每当用户更改列表的位置或向列表中添加元素时,它都会更新
$(function() {
$( "#playlist" ).sortable({
update: function(){
Template.list.updateList(); //MODIFIES DB CONTENTS, AND MAIN_LIST's VALUES CHANGE
}});
$( "#playlist" ).disableSelection();
});
*问题:*如果一个页面在加载时已经有列表元素,我只想添加一个类来隐藏(.addClass(“hide”)
)页面上当时的每个下一个元素。此*仅在通过调用上面的Template.list.updateList
更改主\u列表*之前有效,之后,添加的类将自动消失-很可能是由于正在进行的重新呈现,因为主\u列表取决于db更改
下面是我用来尝试和实现这一点的JQuery代码片段
$("#playlist li .next_song").each(function(){
$(this).addClass("hide_song");
})
您是否可以确定助手函数中是否会出现这种情况
Template.the_playlist.helpers({
'list_elements_exist': function() {
return (!!$('#playlist li').length);
}
}
然后,您可以直接将逻辑插入模板:
<div class="next_song{{#if list_elements_exist}} hide_song{{/if}}">...</div>
。。。
老实说,我不能100%确定这是否会随应用程序的结构而变化。如果它不能正常工作,我将引入一个新的会话布尔值,list\u elements
,其值由上面的helper函数返回。在事件处理程序或创建的
回调中更新其值应该相当容易,以使其跟踪列表中是否有任何项,这将保证列表按要求呈现,而不管其他依赖项如何更改
<div class="next_song{{#if list_elements_exist}} hide_song{{/if}}">...</div>