2015-11-06 101 views
2

反應變量上傳文件時,我使用更新從事件

Template.uploadFile.events({ 
    'change .set-file': function (event, template) { 
    var file = event.currentTarget.files[0]; 

    [...] 
    } 
}); 

我想讀取文件中的每一行,並將每行作爲文檔插入集合中。

問題是我想反應性地顯示用戶已創建了多少行。

首先,我需要將文件中的行數設置爲一個變量。我必須在事件中設置變量,因爲我只知道文件讀取後的行數(即事件已被觸發)。

我想我必須做一些像

Template.uploadFile.helpers({ 
    numRows: function() { 
    return ?; 
    }, 
    numInsertedRows: function() { 
    return ?; 
    }, 
}); 

插入的行數可能只是我收藏的文件數量;不過,我猜想在插入集合的同時,需要從集合中讀取內存。

所以我認爲最好只使用普通變量,因爲所有的信息都應該在不詢問數據庫的情況下可用。

我有一個循環

rowsInFile.forEach(function (row) { 
    // add 1 to number of inserted rows 
}); 

但環也應該改變反應變量之一。

我想我應該使用一個無功變量。我對嗎?這是最有效的內存方式嗎?

+0

我不會從客戶端插入行,而是在服務器上獲取文件本身並在那裏處理它。造成這種情況的主要原因是,如果用戶在操作過程中斷開連接或關閉瀏覽器窗口,將會被切斷,並且很難再次清理應用。 – MasterAM

+0

我該怎麼做?這聽起來比在客戶端上做得更有吸引力。 – Jamgreen

+0

預期的數據文件有多大?將數據作爲字符串數組發送到服務器是否可行?如果預計不會太大,最簡單的選擇是(通過一種方法)。您應該提供一些關於您正在處理的處理類型的更多信息。 – MasterAM

回答

0

你可能會過度複雜的事情。集合中僅有count()文件:

Template.uploadFile.helpers({ 
    numRows: function(){ 
    return myCollection.find({}).count(); 
    } 
}); 

你可以爲插入假設你可以編寫發現他們可靠的查詢數量做同樣的。否則,您只需在您的循環中增加一個會話反應性變量並返回該變量。