如何从 AppMaker 中的查询对象获取排序字段和顺序?

How to get the sorting fields and order from a Query object in AppMaker?

在他们的例子中有这样的东西:

var query = app.models.Person.newQuery();
query.sorting.Name._ascending();

如何从中提取列和顺序?

我尝试了 console.log(Object.keys(query.sorting)); 但它不起作用。

如果我没理解错的话,你只想获取一栏中的信息,然后进行排序。您可以为此使用基本的 javascript。这是您需要的示例:

首先,您使用 array.map 仅获取一列的信息。

var query = app.models.Person.newQuery();
var allPersons = query.run().map(function(person){return person.Name;});

现在您有一个包含 Name 列中所有名称的数组,您可以继续使用 array.sort()

对其进行排序
allPersons.sort();

这应该会为您提供按字母顺序升序排列的姓名列表。

根据我的理解,即您想return列名称和排序的列的排序顺序,我建议以下解决方案。

首先,请注意,在查询服务器脚本中使用 query.sorting.YourFieldName. 时,代码自动完成中会出现以下选项 - _ascending、_descending、_order 和 _priority。将鼠标悬停在 _order 选项上时,您会注意到这是一个 read-only 属性,它表示升序 return 为真,降序 return 为假。没有提到的是,特定列上的任何订单都不会 return 未定义。

所以下面的代码对我有用,return编辑了一个包含列名和顺序的控制台日志,尽管如果有任何排序的关系字段,这段代码就不会出现:

var query = app.models.Person.newQuery();
query.sorting.Name._ascending();
var fields = app.metadata.models.Person.fields;
for (var i in fields) {
  //if statement first checks column is not a foreign key and that column has sorting 
  if(i.indexOf('_fk') === -1 && query.sorting[i]._order !== undefined) {
    console.log(query.sorting[i]._order ? 'Column Name: ' + i + ', Order: Ascending' : 'Column Name: ' + i + ', Order: Descending');
  }
}

控制台会 return "Column Name: Name, Order: Ascending"。让我们知道这是否是您真正想要的。