2016-03-06 62 views
1

我有全局数组,工作得很好,并在我点击提交表单后存储来自用户所选图像的URL。如何为每个网站入口创建一个全局变量?

问题是当我想提交另一个表单时,全局数组仍然具有之前提交的URL。

我想要做的是为每个用户创建一个数组来存储他的URL,一个他点击提交,数组将被删除或删除。所以如果有多个用户使用相同的功能,他们每个人都将有他自己的阵列来存储他的网址

我该怎么做?

这是我曾尝试,但是当我在提交表单页面上点击,什么也没有发生

第一,这是由用户返回所选择的图像的URL的方法,该方法在两个存在文件夹(两者/ file.js)

storeUrlInDatabaseSS: function(url) { 
    check(url, String); 
    Modules.both.checkUrlValidity(url); 

    try { 
     return url; 
    } catch(exception) { 
     return exception; 
    } 
    } 

然后我创建在客户端侧的会话变量(客户端/ file.js)

Session.set("screenshots", []); 
Session.set("i", 0); 

var screenshots = Session.get("screenshots"); 
var i = Session.get("i"); 

和这里i中的URL存储在阵列中

let _addUrlToDatabaseSS = (url) => { 
    screenshots[i++] = url; 
    Session.set("screenshots", screenshots); 
}; 

和正在使用Meteor Collection Hook Package

,我加入的这两行代码应该是兴奋之后用户按下提交,它们存在内部“客户端/ files.js”目录

Products.before.insert(function (userId, doc) { 
    doc.screenShots = Session.get("screenshots"); 
}); 

现在每当我点击提交什么也没有发生,我认为这个问题是因为没有什么实际存储在这里集合中的screenShots属性

screenShots: { 
    type: [String] 
    }, 

当我设置屏幕截图默认属性为空数组像下面的代码,提交按钮工作

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); 
} 

由于某种原因,我之前挂钩不工作,我不明白为什么! 我在这里做错了什么?

+0

对不起,在我看来,你正在寻找收藏,但你的问题是不可理解的。请重写你正在寻找的东西,而不是你已经尝试过的东西。 –

+0

为什么不使用'Session'来存储用户特定的信息?甚至在客户端声明的全局数组对每个用户都是唯一的。那么你的问题到底是什么? –

+0

@BlazeSahlzen我可以使用Session为每个用户专门创建一个全局数组吗?如果是的话,你能告诉我如何?因为这是实际寻找的内容 –

回答

2

为每个用户创建全局数组的方法之一是使用Session。通过这种方式,也可以通过应用程序(仅在客户端)持续使用数据。

使用Session简单的方法是这样的:

  1. 创建Session阵列称为url_list

    Session.set("url_list", []);

  2. Session检索数组:

    var url_list = Session.get("url_list");

  3. 进行更改url_list

    url_list.push(someData);

  4. 商店url_list在再次Session

    Session.set("url_list", url_list);

注意Session只能CLIEN使用T方和所有相关的代码应该在客户端。

More about 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 

} 
+0

是否有一种方法可以在客户端和服务器上运行的代码执行此操作?,因为我在客户端和服务器上都运行代码时使用全局数组(两个目录) –

+0

因为我在我的集​​合中返回Session变量的值,并且在我的服务器端使用集合,所以我需要它在客户端和服务器上都可用,是否可以这样做? –

+0

您的问题没有反映代码是为了在客户端和服务器上运行。所以我认为这是给客户端的。 'Session'只是客户端。所以我们必须找到另一种解决方法。将更新我的答案。 –