更改集合通过客户端排序的方式

时间:2018-04-16 09:03:15

标签: javascript meteor

我有一个显示在页面上的集合:

Template.body.helpers({
  chansonsFutures(){
    return Chansons.find({
      "playedStatus":false
    },{
      sort : { score:-1 }
    });
  },
});

我希望用户能够更改集合的排序方式。在示例中,它按score排序,但我将如何按其他方式排序?

我有一个select

  <select id="ordre">
    <option value="shuffle">Aléatoire</option>
    <option value="vote">Vote</option>
    <option value="lastAdded">Dernier Ajout</option>
  </select>

但如果我在if中添加Template.body.helpers条件,meteor会告诉我的应用程序有错误并且正在等待文件更改。如果我将条件放在Template.body.events中并将其与我change的{​​{1}}相关联,那么它也会给我错误。

我该怎么办?

编辑:回答@Justinas,这是我把条件放在代码中的方式。

我的第一次尝试是直接帮助:

select

另一种方式是这样的:

Template.body.helpers({

if(document.getElementById("ordre").value == "lastAdded"){
  chansonsFutures(){
    return Chansons.find({
      "playedStatus":false
    },{
      sort : { lastAdded:-1 }
    });
  },
};

else if (other value for the select) {
    other stuff happens
};
});

1 个答案:

答案 0 :(得分:2)

这是你需要在js文件中添加的内容:

通过defalult它将得分&#39;得分&#39;并且在更改选择值时它会相应地改变。

    Template.body.onCreated(function() {
      this.sortBy = new ReactiveVar('score');
    })
    Template.body.helpers({

      chansonsFutures : function(){
        var sortParam = Template.instance().sortBy.get();
        return Chansons.find({
          "playedStatus":false
        },{
          sort : { sortParam:-1 }
        });
      },
    });


 Template.body.events({
       'change #ordre':function (event,templateInstance) {
         var sortSelected = $('#ordre option:selelcted').val();
         templateInstance.sortBy.set(sortSelected)
       }
    })