2016-01-23 70 views
1

我想,当用户点击一个按钮来排序一个集合。它在我第一次点击时按预期工作,但是当我再次点击时没有任何反应。流星收集分选工作不正常

在meteor.startup我被“日期”排序我的收藏。当用户点击该按钮类,它通过向“类别”改变了排序,然后我想处理的每一次点击相同的按钮,来排序从升序降序改变。

继承人处理用户点击的片段:

(我几乎可以肯定的问题是在这里某处)

layout.js

Template.layout.events({ 
'click #cat': function(event) { 
    event.preventDefault(); 

    //sets the session to a variable 
    var sortBy = Session.get('sort_by'); 

    if (sortBy.category == 'desc') { 
     return Session.set('sort_by', { 
      category: 'asc' 
     }); 
    } else { 
     return Session.set('sort_by', { 
      category: 'desc' 
     }); 
    } 
    } 
}) 

这是我的router.js:

Router.configure({ 
layoutTemplate: 'layout', 
waitOn: function() { 
    return Estagios.find({},{ sort: Session.get("sort_by")}); 
    }, 
}) 

Publications.js

Meteor.publish('nestagios', function() { 
    return Estagios.find({}); 
}) 

这是我main.js

Meteor.startup(function() { 
Session.set("sort_by", { 
    date: -1, 
    }); 
}); 

谁能帮我找到了,这里有什么问题?谢谢。

回答

1

既然你只需切换可以简化您的事件处理程序下到排序的方向:

Template.layout.events({ 
    'click #cat': function(event) { 
    event.preventDefault(); 
    Session.set('sort_by',{category: -Session.get('sort_by').category}); 
}); 

的会话变量将评估要么{category: 1}{category: -1}

+0

谢谢迈克尔,干净的解决方案。虽然它不能正常工作,直到我说了'类别:-1'到Meteor.startup我main.js文件。 –

0

在你的路由器,你应该使用$排序依据,而不是那种

Router.configure({ 
layoutTemplate: 'layout', 
waitOn: function() { 
    return Estagios.find({},{ $orderBy: Session.get("sort_by")}); 
    }, 
}) 
+0

感谢您的时间奥利弗,仍然没有喜悦。那表达会是一样的?它应该是这样吗? '返回Estagios.find({$查询:{},{$排序依据:Session.get( “sort_by”)}});' –

+0

是啊,我没有看到,直到后来,主要是设置不同键。 –