【发布时间】:2016-03-09 10:50:21
【问题描述】:
我想将用户的 URL 存储到数据库中。到目前为止,我已经在客户端创建了Session 变量并将值存储在那里,然后我使用 Meteor 方法将它们传递给服务器。
这些是执行此操作的方法
screenshotsURLS: function (sshots) {
check(sshots, [String]);
// Products.update({},{$set:{screenShots:sshots}});
scs = sshots.slice();
console.log(scs);
},
previewImageUrl: function (url) {
check(url, String);
pi = url;
console.log(pi);
},
sourceCodeUrl: function (url) {
check(url, String);
zip = url;
console.log(zip);
}
这三个变量“scs, pi, zip”的初始化如下:
var zip;
var pi;
var scs = [];
我的代码工作正常,我设法将变量的值存储在我的集合中,问题是当我从两个浏览器打开网站并调用一个和另一个函数时。上面的变量将具有最后一个调用函数的值。
它们是这样的集合中的商店:
submitPost: function (app) {
// Console.log('new App:', app);
check(app, {
title: String,
description: String,
category: String,
price: Number
});
var knownId = Products.insert(app);
Products.update({ _id: knownId }, { $set:{previewImage: pi, sourceCode: zip }});
}
对于 scs,我使用 autoValue 返回值
screenShots: {
type: [String],
autoValue: function() {
return scs;
}
}
对于submitPost,就是这样从html文件中的quickForm调用的
{{> quickForm collection="Products" id="submitPostForm"
type="method" meteormethod="submitPost" omitFields="createdAt, previewImage, screenShots, sourceCode, userID"}}
一旦用户点击提交按钮,就会触发submitPost。
AutoForm.hooks 实现
AutoForm.hooks({
submitPostForm: { //<--- this is the id of your form
before: { //<-- before submit
methodName: function (doc) { //<-- get the doc to be submitted
//HERE YOU CAN MANIPULATE THE FORM FIELDS BEFORE SUBMIT
var previewImage = Session.get("previewImageURL")
if (previewImage) {
doc.previewImage = previewImage;
}
var sourceCode = Session.get("sourceCodeURL");
if (sourceCode) {
doc.sourceCode = sourceCode;
}
var screenshots = Session.get("screenshots");
if (screenshots) {
doc.screenShots = screenshots;
}
return doc;
}
},
onSuccess: function (formType, result) {
},
onError: function (formType, error) {
}
}
});
我相信我的 AutoForm.hooks 出于某种原因无法正常工作,因为当我尝试 console.log("previewImage") 时没有任何反应!
如何将每个用户的变量“scs, pi, zip”分开,以免它们相互矛盾?
【问题讨论】:
-
我知道为什么会发生这种情况,但我不清楚为什么在写入数据库之前将这些值存储在服务器的内存中 - 这不是正常模式。为什么不将它们作为参数传递给
submitPost? -
@DavidWeldon 不确定是否可以将它们作为参数传递给提交帖子,如果可能的话,这将解决我的问题。我认为不可能的原因是通过使用问题中包含的方法从客户端获取这些变量的值。我错了这是不可能的吗?有没有办法可以将它们传递给 submitPost?我希望这是可能的
-
也许我误解了这个问题。似乎您在说:(1)客户端将值 X 存储在 Session var 中,(2)客户端调用一个方法将 X 存储在服务器的内存中,(3)客户端调用服务器上的
submitPost从中读取 X自己的记忆。为什么不跳过第 2 步,在调用submitPost时将来自客户端的 X 作为第二个参数(在app之后)传递?如果它在 Session 变量中,您可以在调用时从应用程序的任何位置读取它。 -
@DavidWeldon 我认为这不可能,因为 submitPost 方法的调用方式,我编辑了我的问题以显示它是如何调用的,请纠正我的错误
-
这只是一个限制,如果您在创建表单时通过传入方法名称来限制自己。我不是自动表单专家,但在快速浏览文档后,您似乎可以执行 normal 提交处理程序并使用正确的值调用该方法。
标签: meteor