如何为网站的每个入口创建一个全局变量?
how to create a global variable for every entrance to the website?
我有一个工作正常的全局数组,并在我点击表单中的提交后存储用户选择的图像的 URL。
问题是当我想提交另一个表单时,全局数组仍然会有上次提交的 URL。
我想做的是为每个用户创建一个数组来存储他的 URL,一旦他点击提交,该数组将被删除或删除。所以如果有多个用户使用相同的功能,他们每个人都会有自己的数组来存储他的URL的
我该怎么做?
这是我尝试过的方法,但是当我点击表单页面上的提交时,没有任何反应
首先,这是用户选择图片returnsurl的方法,该方法存在于两个文件夹中(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
。这样也可以 持久化 跨应用程序的数据(仅客户端)。
使用Session
的简单方法是:
在 Session
中创建一个名为 url_list
的数组:
Session.set("url_list", []);
从Session
检索数组:
var url_list = Session.get("url_list");
更改 url_list
:
url_list.push(someData);
再次将url_list
存储在Session
中:
Session.set("url_list", url_list);
注意:Session
只能在客户端使用,所有相关代码都在客户端。
将数据保存到服务器端:
将 url_list
保存到服务器的最佳方法是将新文档插入到包含 Session
数据的数据库集合中。
insertToDB = function() {
var url_list = Session.get('url_list');
Products.insert({
'url_list': url_list
});
Session.set('url_list', []); // To empty the client-side list
}
我有一个工作正常的全局数组,并在我点击表单中的提交后存储用户选择的图像的 URL。
问题是当我想提交另一个表单时,全局数组仍然会有上次提交的 URL。
我想做的是为每个用户创建一个数组来存储他的 URL,一旦他点击提交,该数组将被删除或删除。所以如果有多个用户使用相同的功能,他们每个人都会有自己的数组来存储他的URL的
我该怎么做?
这是我尝试过的方法,但是当我点击表单页面上的提交时,没有任何反应
首先,这是用户选择图片returnsurl的方法,该方法存在于两个文件夹中(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
。这样也可以 持久化 跨应用程序的数据(仅客户端)。
使用Session
的简单方法是:
在
Session
中创建一个名为url_list
的数组:Session.set("url_list", []);
从
Session
检索数组:var url_list = Session.get("url_list");
更改
url_list
:url_list.push(someData);
再次将
url_list
存储在Session
中:Session.set("url_list", url_list);
注意:Session
只能在客户端使用,所有相关代码都在客户端。
将数据保存到服务器端:
将 url_list
保存到服务器的最佳方法是将新文档插入到包含 Session
数据的数据库集合中。
insertToDB = function() {
var url_list = Session.get('url_list');
Products.insert({
'url_list': url_list
});
Session.set('url_list', []); // To empty the client-side list
}