2016-01-23 49 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

是啊,我沒有看到,直到後來,主要是設置不同鍵。 –