流星集合排序无法按预期工作

时间:2016-01-23 12:31:53

标签: javascript meteor meteor-blaze

我正在尝试在用户点击按钮时对一个集合进行排序。它在我第一次点击时按预期工作,但是当我再次点击它时没有任何反应。

在meteor.startup上我按'日期'排序我的收藏。当用户单击类别按钮时,它会将排序更改为“类别”,然后我尝试处理每次单击相同的按钮,以将排序从升序更改为降序。

下面是处理用户点击的代码段:

(我几乎可以肯定问题就在这里)

layout.js

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

这是我的router.js:

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

Publications.js

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

这是我的main.js

HSSFWorkbook workbook = new HSSFWorkbook();
HSSFSheet sheet = workbook.createSheet("Sample sheet");

Map<String, Object[]> data = new HashMap<String, Object[]>();
data.put("1", new Object[] {"empNo.", "name", "salary"});
data.put("2", new Object[] {1, "John", 1500000d});
data.put("3", new Object[] {2, "Sam", 800000d});
data.put("4", new Object[] {3, "Dean", 700000d});

Set<String> keyset = data.keySet();
int rownum = 0;
for (String key : keyset) {
    Row row = sheet.createRow(rownum++);
    Object [] objArr = data.get(key);
    int cellnum = 0;
    for (Object obj : objArr) {
        Cell cell = row.createCell(cellnum++);
        if(obj instanceof Integer) 
            cell.setCellValue((Integer)obj);
        else if(obj instanceof String)
            cell.setCellValue((String)obj);
        else if(obj instanceof Double)
            cell.setCellValue((Double)obj);
    }
}

try {
    //new excel file created by fileoutput stream object 
    FileOutputStream out = 
            new FileOutputStream(new File("/home/jagasan/workspace-playexcelApp/public/ExcelFile3.xlsx"));
    workbook.write(out);
    out.close();
    System.out.println("Excel written successfully..");

} catch (FileNotFoundException e) {
    e.printStackTrace();
} catch (IOException e) {
    e.printStackTrace();
}
return ok("file reading is completed");

任何人都可以帮我找出来,这里有什么问题?谢谢。

2 个答案:

答案 0 :(得分:1)

由于您只是切换排序方向,因此您可以将事件处理程序简化为:

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

会话变量将评估为{category: 1}{category: -1}

答案 1 :(得分:0)

在您的路由器中,您应该使用$ orderBy而不是排序

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