反应模板在搜索后重新渲染流星js

时间:2015-12-17 03:41:10

标签: javascript meteor meteor-helper

我已经通过发布和订阅编写了一个简单的搜索,我可以通过console.log看到搜索结果在服务器和客户端中正确显示,但是我的模板似乎没有重新呈现自己,尽管有一个跟踪依赖。下面是客户端,发布和模板onRendered调用的代码。

客户代码

Template.list_customers.onRendered(function(event){
  console.log('Inside Rendered');
  Template.list_customers.__helpers[" getMyCustomers"]();
  //eventsUI.changed();
  eventsUI.changed();
});

Template.list_customers.helpers({
  getMyCustomers: function(searchTerm) {
    console.log('Search Term is ', searchTerm);

    // //Get the current user and its BP Id
      Meteor.subscribe("getUser", Meteor.userId());
      currentUser = Meteor.users.find({
        _id: Meteor.userId()
      }).fetch();

      currentUserBPId = currentUser[0].profile.BusinessPartnerId;
      //Get all the BP's which the logged in BP sells to

      Meteor.subscribe("getCustomerRelations", currentUserBPId);
      customer_cursor = BusinessPartnerRelations.find({
        "bp_subject": currentUserBPId,
        "relation": "sells_to"
      }).fetch();

      bp_predicates = customer_cursor.map(function(c) {
        return c.bp_predicate[0]
      });

      Deps.autorun(function() {
        handlePagination = Meteor.subscribeWithPagination("getCustomers", bp_predicates, 25,searchTerm);
      });

        if(searchTerm){
          console.log(searchTerm);
          customers = BusinessPartners.find({
            score:{"$exists":true}
          }).fetch();

        }
        else {
          customers = BusinessPartners.find({
            _id: { $in: bp_predicates }
          }, {
            sort: {
              name
            }
          }).fetch();
        }

        console.log(customers);
        return customers;
  }

Template.list_customers.events({
  'click #btnSearch': function(event) {
    searchTerm = $('#customerSearch').val();
    Template.list_customers.__helpers[" getMyCustomers"](searchTerm);
    //eventsUI.changed();
  }
});

服务器代码

Meteor.publish("getCustomers",function(customerIds,limit,searchTerm){
  if(!searchTerm){
    return BusinessPartners.find({
      _id:{$in:customerIds}
    },{limit:limit});
    this.ready();
  }
  else{
    customers = BusinessPartners.find({
      _id:{$in:customerIds},
      $text:{$search:searchTerm}
    },
    {fields:{score:{$meta:"textScore"}},
     sort:{score:{$meta:"textScore"}}
    },
    {limit:limit});
    console.log('Server side ', customers.fetch(), customers.count());
    return customers;
    this.ready();
  }
});

1 个答案:

答案 0 :(得分:0)

percolate:paginated-subscription documentation中所述:

  

分页订阅希望您具有发布设置,如   normal,它希望作为最终参数的当前数量   要显示的文件

这里的重要词是“最终”。因此,您的发布函数应该以{{1​​}}作为最终参数,不是第二个:

limit