Я использую uploadify, и функция для изменения настроек, кажется, не работает.
Я основываю свой код от следующего примера:
#(‘#someID’).uploadifySettings(’scriptData’, {‘name’ : some.val()});
Таким образом, вот то, что я делаю:
// INITIALIZATION
$("#"+elementId).uploadify({
// other data
"scriptData": {
"token": token
}
});
Позже я хочу обновить scriptData:
$("#"+elementId).uploadifySettings("scriptData",{"token": "pleasework"});
... но это не работает, это все еще использует набор scriptData во время инициализации.
Что я делаю неправильно?
ОБНОВЛЕНИЕ: Я должен сделать это, потому что я должен обработать маркеры. Вот worflow:
1- Get a token
2- Init uploadify with this token
3- Upload a file
4- Get another token asynchronously
5- Add the token to the already initialized uploadify (bugged)
6- Go to 3
Я пытался делать это на инициализации:
"scriptData": {
"token": $(".token").val()
}
... и обновите .token на шаге 4
Это не работает также
ОБНОВЛЕНИЕ 2: Также, если я делаю:
"scriptData": {
"token": getAToken()
}
с
function getAToken(){
alert("abcd");
return "sometoken";
}
... Я вижу, что функция getAToken только вызвана однажды (только 1 предупреждение)
Я просмотрел источник и заметил, что uploadifySettings ()
имеет необязательный, недокументированный (он не отображается здесь ) третий параметр . Очевидно, если вы установите для него значение true
как в $ ("#" + elementId) .uploadifySettings ("scriptData", {"token": "pleasework"}, true);
это уничтожит существующие настройки для scriptData
и, возможно, это окажет некоторое влияние.
Но, основываясь на источнике, я не могу точно сказать, какое влияние обязательно оказывает изменение настроек.
uploadifySettings:function(settingName, settingValue, resetObject) {
var returnValue = false;
jQuery(this).each(function() {
if (settingName == 'scriptData' && settingValue != null) {
if (resetObject) {
var scriptData = settingValue;
} else {
var scriptData = jQuery.extend(settings.scriptData, settingValue);
}
var scriptDataString = '';
for (var name in scriptData) {
scriptDataString += '&' + name + '=' + escape(scriptData[name]);
}
settingValue = scriptDataString.substr(1);
}
returnValue = document.getElementById(jQuery(this).attr('id') + 'Uploader').updateSettings(settingName, settingValue);
});
Этот код взят из версии 2.1.0
.
Есть ли способ потенциально принять решение о настройках перед инициализацией?
Кроме того, я обнаружил существующий вопрос SO: Проблемы Uploadify updateSettings .
Попытаться определить функцию во время инициализации? IE:
"scriptData": {
"token": function() { return $("#token").val(); }
}
Я не уверен, почему это будет отличаться от некоторых других ваших решений.
Это работает для меня, добавляя уникальный одноразовый номер к каждой загрузке файла
function setScriptData(){
$("#product_attachment").uploadifySettings("scriptData",
{
'_fsg_distro_session' : '<%= u cookies["_fsg_distro_session"] %>',
'authenticity_token' : '<%= u form_authenticity_token if protect_against_forgery? %>',
'nonce' : new Date().getTime() + "<%= @current_user.id %>"
}
);
console.debug($("#product_attachment").uploadifySettings("scriptData"));
}
$("#product_attachment").uploadify({
uploader : '/uploadify/uploadify.swf',
script : '/products/temp_upload',
cancelImg : '/uploadify/cancel.png',
fileDataName : 'asset[temp_file]',
'queueID' : 'fileQueue',
onComplete : function(event, ID, fileObj, response, data){ fileOnCompleteHandler(event,data); },
onSelect : setScriptData,
auto : true,
multi : false,
buttonImg : '/images/attach.png',
fileNameMaxLength : 30
});
Я использую последнюю версию Uploadify (2.1.0) и JQuery (1.4.1)