是否可以即时创建新的 Meteor 集合?我想根据一些路径名创建 foo_bar
或 bar_bar
我想这应该是一个全局变量(这样我就可以在整个应用程序中访问它)。
像这样的东西:
var prefix = window.location.pathname.replace(/^\/([^\/]*).*$/, '$1');
var Bar = new Meteor.Collection(prefix+'_bar');
这里的事情是我应该从 URL 获取我的 prefix
变量,所以如果我在 if (Meteor.isClient)
之外声明它,我会得到一个错误:ReferenceError:未定义窗口
。有可能做那样的事情吗?
编辑:使用 Akshats 的第一次迭代回答我的项目 js:http://pastie.org/6411287
最佳答案
我不完全确定这会起作用:
你需要它分为两部分,第一个部分加载你之前设置的集合(在客户端和服务器上)
var collections = {};
var mysettings = new Meteor.Collection('settings') //use your settings
//Startup
Collectionlist = mysettings.find({type:'collection'});
Collectionlist.forEach(function(doc) {
collections[doc.name] = new Meteor.Collection(doc.name);
})'
并且您需要一些时间来在服务器上添加集合:
Meteor.methods({
'create_server_col' : function(collectionname) {
mysettings.insert({type:'collection', name: collectionname});
newcollections[collectionname] = new Collection(collectionname);
return true;
}
});
并且您需要在客户端上创建它们:
//Create the collection:
Meteor.call('create_server_col', 'My New Collection Name', function(err,result) {
if(result) {
alert("Collection made");
}
else
{
console.log(err);
}
}
同样,这一切都未经测试,所以我只是试一试,希望它能奏效。
编辑
也许下面应该有效,我添加了几个检查以查看集合是否首先存在。在使用它对上面代码中的错误进行排序之前,请先运行 meteor reset
:
var collections = {};
var mysettings = new Meteor.Collection('settings')
if (Meteor.isClient) {
Meteor.startup(function() {
Collectionlist = mysettings.find({type:'collection'});
Collectionlist.forEach(function(doc) {
eval("var "+doc.name+" = new Meteor.Collection("+doc.name+"));
});
});
Template.hello.greeting = function () {
return "Welcome to testColl.";
};
var collectionname=prompt("Enter a collection name to create:","collection name")
create_collection(collectionname);
function create_collection(name) {
Meteor.call('create_server_col', 'tempcoll', function(err,result) {
if(!err) {
if(result) {
//make sure name is safe
eval("var "+name+" = new Meteor.Collection('"+name+"'));
alert("Collection made");
console.log(result);
console.log(collections);
} else {
alert("This collection already exists");
}
}
else
{
alert("Error see console");
console.log(err);
}
});
}
}
if (Meteor.isServer) {
Meteor.startup(function () {
// code to run on server at startup
Collectionlist = mysettings.find({type:'collection'});
Collectionlist.forEach(function(doc) {
collections[doc.name] = new Meteor.Collection(doc.name);
});
});
Meteor.methods({
'create_server_col' : function(collectionname) {
if(!mysettings.findOne({type:'collection', name: collectionname})) {
mysettings.insert({type:'collection', name: collectionname});
collections[collectionname] = new Meteor.Collection(collectionname);
return true;
}
else
{
return false; //Collection already exists
}
}
});
}
还要确保你的名字是 javascript 转义的。
关于mongodb - 即时创建新的 Meteor 集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15214667/