【问题标题】:Discover meteor-Unsubscribe?发现流星-退订?
【发布时间】:2015-01-23 23:14:16
【问题描述】:

我目前正在开发自己的项目,基于发现流星书。

我订阅了我的收藏“帖子”。

我正在使用easy-search(一个搜索包),目前遇到了一些麻烦。

我可以轻松搜索使用 javascript 调用的叠加层。

当我搜索时,它总是会返回订阅+搜索结果中包含的帖子作为结果。

例如,如果我在帖子列表页面中,如果我搜索 Chocolate,结果将是帖子列表页面中的每个帖子 + Chocolate 关键字帖子。

单个帖子页面也是如此。

我想知道是否可以通过点击事件暂时取消订阅。在这种情况下,将是搜索按钮。

【问题讨论】:

    标签: javascript mongodb collections meteor publish-subscribe


    【解决方案1】:

    不要使用Meteor.publish 进行搜索。

    1. 改为在服务器上创建Meteor.method 以查找搜索结果。
    2. 创建仅客户端(非托管)集合var results = new Mongo.Collection(null)
    3. 执行搜索时,删除所有结果 results.remove({}),然后插入来自 Meteor.method 回调的结果。

    然后,要停止每次搜索,直到下一个搜索完成(不利于自动完成),您可以查看调用 Meteor.method with wait: false 例如。

    Meteor.apply('mySearchMethod',[parameters], {wait: false}, function(err, res){});
    

    要完成这项工作,您需要在搜索方法中调用this.unblock()


    示例代码

    var searching = new ReactiveVar(false);
    var currentSearch = "";
    var results = new Mongo.Collection(null);
    var search = function(searchText){
      searchText = searchText.trim();
      if (searchText === currentSearch){
         // abort search if query wasn't different
         return;
      }
      // clear results immediately (don't show expired results)
      // NOTE: this can cause "flicker" as results are removed / re added
      results.remove({});
      if (searchText === ""){
         return;
      } 
      searching.set(true);
      performSearch(searchText)
    };
    var performSearch = _.debounce(function(searchText){
      currentSearch = searchText;
      Meteor.apply('mySearchMethod', [searchText], {wait: false}, function(err, res){
        if (err){
            console.error(err);
        } 
        if (currentSearrch !== searchText){
           // query changed, results aren't relevant
           return;
        }
        for (var i = 0; i < res.length; i++){
           results.insert(res[i]);
        }
        searching.set(false);
      })
    }, 300);
    
    Template.myTemplate.events({
      'input #mySearchBox': function(e){
        search($(e.currentTarget).val());
      }
    });
    
    Template.myTemplate.heplers({
      'searchResults': function(){
         return results.find();
      },
      'showSpinner': function(){
         return searching.get();
      }
    })
    
    
    if (Meteor.isServer){
      Meteor.methods({
        'mySearchMethod': function(searchText){
             check(searchText, String);
             this.unblock();
             var searchExp = new RegExp(RexExp.escape(searchText), 'i');
             return myCollection.find({myField: searchExp}).fetch();
        }
      });
    }
    

    【讨论】:

    • 非常感谢!我刚起床,感觉自己早早收到了圣诞礼物。我想我将不得不创建自己的而不是使用包:)
    猜你喜欢
    • 2014-05-04
    • 1970-01-01
    • 2014-06-16
    • 2015-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-17
    相关资源
    最近更新 更多