Exception in template helper: Error: Match error
Exception in template helper: Error: Match error
我正在尝试使用 Meteor 模板助手中的比较器函数执行自定义排序。
这是我的模板助手:
Template.move_list.helpers({
assets() {
return Assets.find({}, { sort: sortFunction });
}
});
这里是比较函数:
const sortFunction = function (doc1, doc2) {
const barcodes = Session.get('barcodesArray');
if (barcodes.indexOf(doc1.barcode) === -1 || barcodes.indexOf(doc2.barcode) === -1) {
return 0;
}
let last = null;
_.each(barcodes, function (barcode) {
if (barcode === doc1.barcode) last = doc1.barcode;
if (barcode === doc2.barcode) last = doc2.barcode;
});
return last === doc1.barcode ? 1 : -1;
}
错误
页面加载时,返回以下错误:
Exception in template helper: Error: Match error: Failed Match.OneOf, Match.Maybe or Match.Optional validation
我在 chrome 中放置了一个断点到 sortFunction
中,但是该函数从未进入并且从未到达过断点。
当然,当我删除sort
.
时不会抛出错误
参考资料
此功能没有很好的文档记录,但是这里是 relevant part of the docs:
For local collections you can pass a comparator function which receives two document objects, and returns -1 if the first document comes first in order, 1 if the second document comes first, or 0 if neither document comes before the other. This is a Minimongo extension to MongoDB.
并且 commit by mitar 添加了功能,示例代码来自测试:
var sortFunction = function (doc1, doc2) {
return doc2.a - doc1.a;
};
c.find({}, {sort: sortFunction})
谁能理解这个错误?
编辑:
这个问题应该在 Meteor >= v1.3.3.1 中得到解决。
本地集合(即客户端和内存服务器端集合)将允许作为 sort
子句传递函数。
错误来自 mongo
包,其中规范不允许 sort
成为函数。
@mitar 在 minimongo
包中更改了 LocalCollection
。 LocalCollection
是客户端 Mongo.Collection
对象的一部分(它的 _collection
属性),但仍然根据原始 mongo
规范检查查询。 我认为这是一个错误,因为规范未更新以反映更改。
为了克服这个问题(与此同时),要么让函数接受一个子字段,这样 sort
值就是一个对象:
var sortFunction = function (x, y) {
return x - y;
};
c.find({}, {sort: {a: sortFunction}});
或者改用 c._collection.find()
,这将起作用(据我所知),但它不会应用为集合定义的任何转换。
var sortFunction = function (doc1, doc2) {
return doc2.a - doc1.a;
};
c._collection.find({}, {sort: sortFunction});
我正在尝试使用 Meteor 模板助手中的比较器函数执行自定义排序。
这是我的模板助手:
Template.move_list.helpers({
assets() {
return Assets.find({}, { sort: sortFunction });
}
});
这里是比较函数:
const sortFunction = function (doc1, doc2) {
const barcodes = Session.get('barcodesArray');
if (barcodes.indexOf(doc1.barcode) === -1 || barcodes.indexOf(doc2.barcode) === -1) {
return 0;
}
let last = null;
_.each(barcodes, function (barcode) {
if (barcode === doc1.barcode) last = doc1.barcode;
if (barcode === doc2.barcode) last = doc2.barcode;
});
return last === doc1.barcode ? 1 : -1;
}
错误
页面加载时,返回以下错误:
Exception in template helper: Error: Match error: Failed Match.OneOf, Match.Maybe or Match.Optional validation
我在 chrome 中放置了一个断点到 sortFunction
中,但是该函数从未进入并且从未到达过断点。
当然,当我删除sort
.
参考资料
此功能没有很好的文档记录,但是这里是 relevant part of the docs:
For local collections you can pass a comparator function which receives two document objects, and returns -1 if the first document comes first in order, 1 if the second document comes first, or 0 if neither document comes before the other. This is a Minimongo extension to MongoDB.
并且 commit by mitar 添加了功能,示例代码来自测试:
var sortFunction = function (doc1, doc2) { return doc2.a - doc1.a; };
c.find({}, {sort: sortFunction})
谁能理解这个错误?
编辑:
这个问题应该在 Meteor >= v1.3.3.1 中得到解决。
本地集合(即客户端和内存服务器端集合)将允许作为 sort
子句传递函数。
错误来自 mongo
包,其中规范不允许 sort
成为函数。
@mitar 在 minimongo
包中更改了 LocalCollection
。 LocalCollection
是客户端 Mongo.Collection
对象的一部分(它的 _collection
属性),但仍然根据原始 mongo
规范检查查询。 我认为这是一个错误,因为规范未更新以反映更改。
为了克服这个问题(与此同时),要么让函数接受一个子字段,这样 sort
值就是一个对象:
var sortFunction = function (x, y) {
return x - y;
};
c.find({}, {sort: {a: sortFunction}});
或者改用 c._collection.find()
,这将起作用(据我所知),但它不会应用为集合定义的任何转换。
var sortFunction = function (doc1, doc2) {
return doc2.a - doc1.a;
};
c._collection.find({}, {sort: sortFunction});