【发布时间】:2016-03-07 22:04:44
【问题描述】:
我有一个工作得很好的全局数组,并在我单击表单中的提交后存储用户选择的图像的 URL。
问题是当我想提交另一个表单时,全局数组仍然会有之前提交的 URL。
我想要做的是为每个用户创建一个数组来存储他的 URL,当他单击提交时,该数组将被删除或删除。所以如果有多个用户使用同一个函数,每个人都会有自己的数组来存储他的 URL
我该怎么做?
这是我尝试过的,但是当我点击表单页面上的提交时,没有任何反应
首先,这是返回用户选择图像的url的方法,该方法存在于两个文件夹(both/file.js)中
storeUrlInDatabaseSS: function( url ) {
check( url, String );
Modules.both.checkUrlValidity( url );
try {
return url;
} catch( exception ) {
return exception;
}
}
然后我在客户端 (client/file.js) 中创建了会话变量
Session.set("screenshots", []);
Session.set("i", 0);
var screenshots = Session.get("screenshots");
var i = Session.get("i");
在这里我将 url 存储在数组中
let _addUrlToDatabaseSS = ( url ) => {
screenshots[i++] = url;
Session.set("screenshots", screenshots);
};
我正在使用Meteor Collection Hook Package
我添加了这两行代码,用户按下提交后应该会感到兴奋,它们存在于“client/files.js”目录中
Products.before.insert(function (userId, doc) {
doc.screenShots = Session.get("screenshots");
});
现在每当我点击提交时,什么都没有发生,我认为问题是因为这里的集合中的 screenShots 属性中实际上没有存储任何内容
screenShots: {
type: [String]
},
当我将 screenShots 属性默认设置为空数组时,如下面的代码,提交按钮起作用
screenShots: {
type: [String],
autoValue: function() {
return [];
}
},
我尝试使用 AutoForm.hooks 的另一种方式
AutoForm.hooks({
submitPostForm: {
before: {
insert: function(doc) {
doc.$set.screenShots = Session.get("screenshots");
}
}
}
});
这是我在 .html 文件中的表单
{{> quickForm collection="Products" id="submitPostForm"
type="method" meteormethod="submitPost" omitFields="createdAt, previewImage, screenShots, sourceCode, userID"}}
这是用户提交表单后触发的方法,它存在于服务器端。
submitPost: function (app) {
// Console.log('new App:', app);
check(app, {
title: String,
description: String,
category: String,
price: Number
});
Products.insert(app);
}
由于某种原因,我的 before 钩子不起作用,我不明白为什么! 我在这里做错了什么?
【问题讨论】:
-
抱歉,在我看来您正在寻找收藏品,但您的问题不太好理解。请重写您正在寻找的内容,而不是您已经尝试过的内容。
-
为什么不使用
Session来存储用户特定的信息?即使是在客户端声明的全局数组对每个用户都是唯一的。那么你的问题到底是什么? -
@BlazeSahlzen 我可以使用 Session 专门为每个用户创建一个全局数组吗?如果是,请你告诉我怎么做?因为这就是我真正想要的
-
@TomFreudenberg 我想专门为每个用户创建全局数组,因为我的数组现在用于整个系统。我会修改问题
-
以您正在寻找什么样的解决方案的方式修改问题:例如“每个用户都应该能够上传和描述基于 url 的屏幕截图”或描述性的东西。