【问题标题】:MeteorJS.On refreshing a page the search results get lostMeteorJS.在刷新页面时搜索结果会丢失
【发布时间】:2016-11-12 04:17:22
【问题描述】:

我正在为我的 webapp 使用搜索框。单击搜索按钮后,用户会被定向到“搜索结果”页面并显示结果。但刷新页面时,搜索结果会丢失。如何使用会议? HTML 代码是:

<div class="form-group">
        <input type="text"  class="form-control" id='searchbox' placeholder="Search">
</div>

js代码为:

 Template.navigation.events({
    'submit form':function(event){
        event.preventDefault();
        var searchbox=document.getElementById('searchbox').value;
        Router.go('/posts/search/'+searchbox);
    }
    });

    Template.searchresults.helpers({
        'post':function(){
            var searchbox=document.getElementById('searchbox').value;
            var search=new RegExp('\\b'+searchbox+'\\b','i');
            return Posts.find({name:search});
        }
    });

和routerjs代码是:

Router.route('/posts/search/:somesearch/',{
    template:'searchresults',
    name:'searchresults',


});

【问题讨论】:

    标签: javascript meteor iron-router meteor-blaze


    【解决方案1】:

    让我们在路由中设置数据上下文,而不是使用辅助函数:

    Router.route('/posts/search/:somesearch/',{
      template:'searchresults',
      name:'searchresults',
      data: function(){
        return Posts.find({ name: this.params.somesearch });
      } 
    });
    

    完全删除您的 post 模板助手。

    在您的 HTML 模板中,您需要使用{{#each this}} 进行迭代,因为this 将是路由器中data 函数返回的光标

    注意,对于多词搜索和特殊字符,您需要对搜索字符串进行 url 编码/解码。

    【讨论】:

    • 先生,我进行了更改,但仍然在刷新页面时内容丢失了。
    • 您的#searchbox 是否在重新加载时被填充?
    • 在我看来,OP 的主要问题是由于 searchresults 模板使用 #searchbox 值作为参数而不是路由的参数。因此,在操作后重新填充搜索框可能已经太晚了。
    • 同意。我将重写解决方案,让路由器提供数据上下文。
    • 先生,在寻求帮助之前,我在路由中使用数据上下文来返回搜索到的帖子。但是我无法为 searchresults 模板找出合适的代码来显示搜索到的帖子? searchresults模板下应该写什么?
    猜你喜欢
    • 2014-12-31
    • 2023-03-25
    • 2019-09-12
    • 2014-07-20
    • 1970-01-01
    • 2021-06-26
    • 2019-05-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多