我已經有完全相同的問題,對我來說,既不包裝setTimeout()
也不setInterval()
工作。
墨水本身在它們的docs中提供了一個很好的無阻塞腳本,它將所有文件選擇器調用排隊,直到完全加載,然後按照它們被調用的順序執行。這是如何工作的:
mrt remove filepicker
(如果加)
mrt remove loadpicker
(如果加)
- 創建新的文件
/lib/filepicker.js
/lib/filepicker.js
if (Meteor.isClient) {
(function(a) {
if (window.filepicker) {
return
}
var b = a.createElement("script");
b.type = "text/javascript";
b.async = !0;
b.src = ("https:" === a.location.protocol ? "https:" : "http:") + "//api.filepicker.io/v1/filepicker.js";
var c = a.getElementsByTagName("script")[0];
c.parentNode.insertBefore(b, c);
var d = {};
d._queue = [];
var e = "pick,pickMultiple,pickAndStore,read,write,writeUrl,export,convert,store,storeUrl,remove,stat,setKey,constructWidget,makeDropPane".split(",");
var f = function(a, b) {
return function() {
b.push([a, arguments])
}
};
for (var g = 0; g < e.length; g++) {
d[e[g]] = f(e[g], d._queue)
}
window.filepicker = d
})(document);
filepicker.setKey(YOUR_FILEPICKER_KEY);
}
此客戶端代碼是一個香草版本從https://developers.inkfilepicker.com/docs/web/取得無阻塞裝載機。使用這個,你可以設置一次密鑰,然後使用filepicker,而不必擔心它是否已經加載。
當然,你也可以修改loadpicker這一點,只需粘貼此代碼在您的loadpicker.js
loadpicker.js
loadPicker = function(key) {
(function(a) {
if (window.filepicker) {
return
}
var b = a.createElement("script");
b.type = "text/javascript";
b.async = !0;
b.src = ("https:" === a.location.protocol ? "https:" : "http:") + "//api.filepicker.io/v1/filepicker.js";
var c = a.getElementsByTagName("script")[0];
c.parentNode.insertBefore(b, c);
var d = {};
d._queue = [];
var e = "pick,pickMultiple,pickAndStore,read,write,writeUrl,export,convert,store,storeUrl,remove,stat,setKey,constructWidget,makeDropPane".split(",");
var f = function(a, b) {
return function() {
b.push([a, arguments])
}
};
for (var g = 0; g < e.length; g++) {
d[e[g]] = f(e[g], d._queue)
}
window.filepicker = d
})(document);
filepicker.setKey(key)
};
希望這對你的作品!
是的,就是這樣。增加了這樣一個功能,現在錯誤是固定的。 – Ben
Nate,我會把最後一個函數(filepickerInterval)放在Meteor.startup()函數裏面嗎? 而@Ben你最終選擇哪個功能? –
我使用第一個選項,我渲染一個正常的按鈕/鏈接,然後當用戶點擊時,我設置filepicker鍵,併爲我調用適當的方法(通常pickAndStore) –