Я работаю над веб-приложением для компании, в которой я работаю, и у меня есть проблема с формой, которая требуется.jquery - xeditable select source using function, используя дефферированное и локальное хранилище (indexedDB)
У меня возникли проблемы с заполнением списка выбора данными из другой функции с помощью xeditable.
Проблема заключается в том, что код, который выполняется для заполнения окна выбора, не дожидается, когда другая функция получит данные из локального хранилища и вернет его, хотя я использую defffered (я не уверен, что Я правильно использую функции deffered/resolve).
Это код, который у меня есть:
<a id="TypeID" data-type="select" data-pk="1966_TypeID" data-original-title="Please Select" data-pid="36" class="editable editable-click">3609</a>
JQuery:
function popSelectBox(PID) {
var rtn = [];
$.indexedDB('testDatabase').objectStore('Lookup').index('PID').each(function (i) {
var source = {};
source.value = i.value.ID;
source.text = i.value.Name;
rtn.push(source);
}, PID).done(function (r, e) {
console.log(rtn);
console.log('popSelectBox function (I expect to see this first) - This section should complete before the makeEditable function');
return rtn;
});
}
function makeEditable() {
$('.editable').editable({
validate: function (value) {
if ($.trim(value) === '') {
return 'This field is required';
}
return false;
},
success: function (response, newValue) {
console.log($(this).data('pk'), newValue);
//$(this).parent().css('background-color', 'green');
},
/**** this is the problem section of this function ****/
source: function() {
//if the type is a select list then we need to populate it, this is done here
if ($(this).data('type') === 'select') {
var d = $.Deferred();
$.when(d).done(function (v) {
console.log(v);
return v;
});
d.resolve(popSelectBox($(this).data('pid').toString()));
console.log('makeEditable function (I expect to see this last) - This section should wait for the popSelectBox function to finish');
}
}
});
}
У меня также есть скрипку здесь http://jsfiddle.net/f8otrayn/3/, который показывает выше. В эту скрипту входит пример локального хранилища, который я использую, функции для его настройки присутствуют, однако я прокомментировал вызов функции, вы можете проверить код и раскомментировать, если хотите.
Я ищу способ подождать, пока функция popSelectBox не закончит и не вернет данные, поэтому я могу использовать эти данные для заполнения окна выбора, я действительно не хочу использовать setTimeout, так как есть много записей в локальном хранение, поэтому ожидание определенного периода времени может не работать во всех случаях.
Кто-нибудь есть какие-либо идеи
Благодарности
Привет это большое спасибо, она возвращается, что мы хотим, однако это не заселять выберите поле. Положив несколько консолей вокруг, чтобы увидеть, что происходит, похоже, что arr не входит в сферу .идействующей функциональности, которая является странной. Я не совсем уверен, что он делает, но добавление консоли в исходную функцию ничего не возвращает, пока я не щелкнул элемент, а затем вернется в неопределенное состояние. Добавление консоли выше или ниже возвращаемой функции возвращает то, что мы ожидаем PID в функции popSelectBox - это функция indexedDB, которая у нас есть, она действует как оператор where в sql –
Является ли 'popSelectBox' когда-либо вызываемым и выполняет ли его обещание ? –
И делать какие-либо неизбираемые становятся доступными для редактирования? –