Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Meteor 重新渲染隐藏元素_Meteor - Fatal编程技术网

Meteor 重新渲染隐藏元素

Meteor 重新渲染隐藏元素,meteor,Meteor,我正在创建一个meteor应用程序,它在页面的左半部分有一个可见的帖子列表,在右侧有一个隐藏的显示容器。用户单击文章标题,显示容器将显示在页面的右侧,并显示完整的文章。现在,显示完整立柱的容器最初是隐藏的,其元素中只填充了handlebar表达式。如果您单击另一篇文章,同一个显示容器将保持打开状态,但只是更改了其内容 点击帖子 Template.postsList.events({ 'click .post': function (e, template) { e.preve

我正在创建一个meteor应用程序,它在页面的左半部分有一个可见的帖子列表,在右侧有一个隐藏的显示容器。用户单击文章标题,显示容器将显示在页面的右侧,并显示完整的文章。现在,显示完整立柱的容器最初是隐藏的,其元素中只填充了handlebar表达式。如果您单击另一篇文章,同一个显示容器将保持打开状态,但只是更改了其内容

点击帖子

Template.postsList.events({
   'click .post': function (e, template) {
       e.preventDefault();
       Session.set('selectedPost', this._id);
   }
});
把手表达式示例

Template.postDisplay.title = function () {
   return Posts.findOne(Session.get('selectedPost')).title
}
除了显示容器的反应性之外,其他一切都很好地工作。如果数据库中的某些内容发生更改(无论是添加的注释、标题的更改等),显示将再次隐藏,我必须重新单击帖子。postsList模板的所有值都会正常、无缝地更新,不会出现任何闪烁或任何情况

是否有一种方法可以更新显示容器的值,同时防止其被隐藏

这就是我展示容器的方式。只是普通的展示和隐藏

文件加载时

$('#post-display-container').hide();
在元素上单击

 $('.title').click(function () {
    $('#post-display-container').show()
 });
postDisplay模板的示例。当然,整件事都不是我干的

<template name="postDisplay">
   {{#each posts}}
   <h3 class='title'>{{title}}</h3>
   <p class='body'>{{body}}</p>
   {{/each}}
</template>

在Meteor文档中,在中,您可以看到当您单击所需的帖子时要做什么

将所选的类添加到左边的帖子中,可以提供当前所选帖子的线索

在右边,您也只显示基于会话的当前选定帖子。单击时不要试图显示帖子。想一想把一些类,使该职位出现

为了清楚起见,您必须更改您的帖子显示,使其与下面的类似,以便在重新呈现类时,该类仍然存在,并且您的帖子(在右侧)仍然显示。顺便说一下,当页面也加载时,请删除.hide(),并更改单击帖子时的行为,以将会话更改为新的当前选定帖子

<template name="postItem">
  <div class="{{postClass}}">{{title}}</div>
</template>

Template.postItem.postClass = function() {
   return Session.equals("selectedPost", this._id) ?
      "selected" : "";
};

{{title}}
Template.positem.postClass=函数(){
返回会话.equals(“selectedPost”,此.\u id)?
“选定”:“选定”;
};

这应该很容易。显示容器的方式可能有错误。你能展示你用来让它可见的代码吗?@HubertOG好的,我更新了信息。当用户第一次到达页面时,右侧不是空白的(网站品牌,其他东西)。当用户点击一个帖子时,这些东西就被掩盖了。移除隐藏会影响这一点吗?@CassioSCabral“您必须将您的帖子显示更改为与下面类似,以便在重新呈现类时,该类仍然存在,并且您的帖子(右侧)仍然显示”您能解释一下吗?我不确定我是否理解你。在你的模板帖子显示中,你需要一个围绕帖子的div,它可能有一个来自helper postClass函数的“selected”类。所选类意味着post具有display:block,这相当于对该元素调用.show()。单击帖子时,它将更改会话中当前选定的帖子,并重新呈现,自动显示正确的帖子。如果未选择任何帖子,则可以在右侧显示其他内容。
<template name="postItem">
  <div class="{{postClass}}">{{title}}</div>
</template>

Template.postItem.postClass = function() {
   return Session.equals("selectedPost", this._id) ?
      "selected" : "";
};