Meteor 这是我的代码,当我第一次将多条记录插入我的收藏时,但当我第二次插入多条记录时,它说的是重复的_id,
这是我的代码,当我第一次在我的收藏中插入多条记录时,它工作得很好,但当我第二次插入时,它说的是复制id,如何修复它Meteor 这是我的代码,当我第一次将多条记录插入我的收藏时,但当我第二次插入多条记录时,它说的是重复的_id,,meteor,Meteor,这是我的代码,当我第一次在我的收藏中插入多条记录时,它工作得很好,但当我第二次插入时,它说的是复制id,如何修复它 //Save Journal Detail $("#item-list tr").each(function (e) { //debugger; var yearMonth = $('#journalDate').val(); var da
//Save Journal Detail
$("#item-list tr").each(function (e) {
//debugger;
var yearMonth = $('#journalDate').val();
var date = moment(yearMonth).format("YYMM");
var prefix = curBranch + "-" + date;
var chartAccountId = $(this).find(".chart-account-id option:selected").val();
if (chartAccountId == "" || chartAccountId == null) {
return;
}
var journalDetailId = idGenerator.genWithPrefix(Acc.Collection.JournalDetail, prefix, 8);
var debit = parseFloat($(this).find(".debit").val());
var credit = parseFloat($(this).find(".credit").val());
if (debit > 0) {
Acc.Collection.JournalDetail.insert({
_id: journalDetailId,
journalId: doc._id,
chartAccountId: chartAccountId,
drCr: debit,
split: "Hello"
});
} else {
Acc.Collection.JournalDetail.insert({
_id: journalDetailId,
journalId: doc._id,
chartAccountId: chartAccountId,
drCr: -credit,
split: "Hello"
});
}
});
return doc;
问题很可能是,
$。每次(
迭代都不会等待insert
调用完成,因此集合中的最后一个id保持不变,因此idGenerator.genWithPrefix
为多个连续的insert调用提供相同的id
在Meteor客户端中。因此,在通过idGenerator.genWithPrefix
获取下一个id之前,您必须等待每次insert
调用,否则您下一个生成的id将与您开始插入的上一个id相同
一个简单的解决方案是使用方法调用将该逻辑传输到服务器(其中,insert
调用被阻塞),只给它您希望它插入的文档列表
在客户机上:
//Save Journal Detail
var listToInsert = [];
var yearMonth = $('#journalDate').val();
var date = moment(yearMonth).format("YYMM");
var prefix = curBranch + "-" + date;
$("#item-list tr").each(function (e) {
//debugger;
var chartAccountId = $(this).find(".chart-account-id option:selected").val();
if (chartAccountId == "" || chartAccountId == null) {
return;
}
var debit = parseFloat($(this).find(".debit").val());
var credit = parseFloat($(this).find(".credit").val());
listToInsert.push({
journalId: doc._id,
chartAccountId: chartAccountId,
drCr: debit > 0 ? debit : -credit, // simplified with a ternary operator
split: "Hello"
});
});
Meteor.call("insertEntries", listToInsert, prefix, function () {
//done!
});
return doc;
在服务器上:
Meteor.methods({
'insertEntries': function (listToInsert, prefix) {
for (var i = 0; i < listToInsert.length; i++) {
listToInsert[i]._id = idGenerator.genWithPrefix(Acc.Collection.JournalDetail, prefix, 8);
// Since we're on the server, this insert will be blocking
Acc.Collection.JournalDetail.insert(listToInsert[i]);
}
}
});
Meteor.methods({
“insertEntries”:函数(listToInsert,前缀){
对于(变量i=0;i
最好允许集合插入自己的\u id,但如果要手动定义\u id,只需在插入之前检查即可。比如说(!Acc.Collection.JournalDetail.findOne({u id:JournalDetail})){//insert it}顺便问一下,上面的代码在帮助程序或事件中的什么位置?我尝试了你的解决方案,但现在它工作了。有任何帮助哦,对不起,它不工作了。我搞不清楚你在写上面的代码吗?