MeteorJS 和 Mongo:初始收集计数始终为 0
MeteorJS and Mongo: Initial collection count is always 0
我有一个使用 meteor js 创建数独网格的自学项目。在这段代码中,我尝试在初始化模板之前先填充数据库,模板将只从数据库中读取现有值。下面是我的客户端 js 代码:
Cells = new Mongo.Collection("cells");
if(Meteor.isClient) {
Session.setDefault("colMax", 9);
Session.setDefault("rowMax", 9);
Meteor.startup(function() {
for(var i = 0; i < Session.get("rowMax"); i++) {
for(var j = 0; j < Session.get("colMax"); j++) {
if(Cells.find({row: i, col: j}).count() == 0) {
Cells.insert({
value: -1,
row: i,
col: j,
createdAt: new Date()
});
}
}
}
});
Template.createSudoku.helpers({
rows: function() {
var _rows = [];
for(var i = 0; i < Session.get("rowMax"); i++) {
_rows.push(Cells.find({row: i}, {sort: {col: 1}}));
}
return _rows;
}
});
}
下面是我的 html 代码
<body>
<header>
<h1>Sudoku</h1>
</header>
<table class="sudoku">
{{> createSudoku}}
</table>
<button class="reset">reset</button>
</body>
<template name="createSudoku">
{{#each rows}}
{{> createRow cells=this}}
{{/each}}
</template>
<template name="createRow">
<tr>
{{#each cells}}
{{> createCell}}
{{/each}}
</tr>
</template>
<template name="createCell">
<td class="cell-{{row}}-{{col}}">{{value}}</td>
</template>
问题是,每次我刷新页面时,table 都会不断增加。有关其他信息,我打开了自动发布。有什么提示可以帮助我解决这个问题吗?谢谢!
该行为是正确的。考虑到实际的数据库存储在服务器端,客户端收集的初始计数将始终为 0。客户端数据库会随着时间的推移而填充。
如果只想插入一些夹具数据一次,标准程序是在服务器端执行。
但是,如果我误解了你的用例,而你仍然觉得出于某种原因,你必须在客户端进行,然后在你的订阅方法中的回调中进行。
Meteor.subscribe('faq',
/* onReady callback */
function() {
console.log(somecollection.find().count());
}
)
我有一个使用 meteor js 创建数独网格的自学项目。在这段代码中,我尝试在初始化模板之前先填充数据库,模板将只从数据库中读取现有值。下面是我的客户端 js 代码:
Cells = new Mongo.Collection("cells");
if(Meteor.isClient) {
Session.setDefault("colMax", 9);
Session.setDefault("rowMax", 9);
Meteor.startup(function() {
for(var i = 0; i < Session.get("rowMax"); i++) {
for(var j = 0; j < Session.get("colMax"); j++) {
if(Cells.find({row: i, col: j}).count() == 0) {
Cells.insert({
value: -1,
row: i,
col: j,
createdAt: new Date()
});
}
}
}
});
Template.createSudoku.helpers({
rows: function() {
var _rows = [];
for(var i = 0; i < Session.get("rowMax"); i++) {
_rows.push(Cells.find({row: i}, {sort: {col: 1}}));
}
return _rows;
}
});
}
下面是我的 html 代码
<body>
<header>
<h1>Sudoku</h1>
</header>
<table class="sudoku">
{{> createSudoku}}
</table>
<button class="reset">reset</button>
</body>
<template name="createSudoku">
{{#each rows}}
{{> createRow cells=this}}
{{/each}}
</template>
<template name="createRow">
<tr>
{{#each cells}}
{{> createCell}}
{{/each}}
</tr>
</template>
<template name="createCell">
<td class="cell-{{row}}-{{col}}">{{value}}</td>
</template>
问题是,每次我刷新页面时,table 都会不断增加。有关其他信息,我打开了自动发布。有什么提示可以帮助我解决这个问题吗?谢谢!
该行为是正确的。考虑到实际的数据库存储在服务器端,客户端收集的初始计数将始终为 0。客户端数据库会随着时间的推移而填充。
如果只想插入一些夹具数据一次,标准程序是在服务器端执行。
但是,如果我误解了你的用例,而你仍然觉得出于某种原因,你必须在客户端进行,然后在你的订阅方法中的回调中进行。
Meteor.subscribe('faq',
/* onReady callback */
function() {
console.log(somecollection.find().count());
}
)