web2py SQLFORM принимает слишком быстро
У меня есть web2py SQLFORM, который генерируется и возвращается вызовом AJAX, и форма помещается в определенный мной DIV. Я хочу, чтобы SQLFORM была формой обновления, а не формой вставки. Проблема в том, что форма сразу запускает функцию accept после записи в этот DIV. Этого не происходит, если форма для вставки, только обновление. Первоначальное принятие не проходит, и нажатие кнопки подтверждения не позволяет вторую принять. Я не знаю, почему не удается принять или почему это происходит немедленно.
вот функция JavaScript, которая делает вызов AJAX
function displayForm(currID){
//Remove everything from the DIV we want to use
$('#window').empty();
//Call the ajax to bring down the form to update the series
ajax('{{=URL('newForm')}}/'+currID,
[], 'window');
}
А вот и контроллер newForm
def newSerForm():
record = db.myTable(request.args[0])
form = SQLFORM(db.myTable, record, fields=['series_name','image_thumbnail'])
if form.accepts(request.vars,session):
print 'Series update successful!'
else:
print 'Series update Failed...'
return form
displayForm вызывается нажатием кнопки, и после того, как вы это сделаете, форма принимает и терпит неудачу, и кнопка отправки снова не работает. Есть ли способ заставить SQLFORM сделать это? Странная вещь, если я изменю это, чтобы сделать вставки в myTable, это работает отлично. Он ведет себя именно так, как и должен. Но делать это таким образом не работает.
Хорошо, теперь это где-то странно. Я попытался достичь той же функциональности здесь с совершенно другим подходом, iFrame. Я сделал новые функции в моих контроллерах, которые создают форму на основе request.args[0]. выглядит так
def editEntry():
print request.args[0]
record = db.myTable(request.args[0])
form = SQLFORM(db.CC_user_submission, record, fields=['series_name', 'image_thumbnail']).process()
return dict(form=form)
А затем соответствующая HTML-страница, которая просто отображает форму. Что может быть проще, верно? Я иду на эту страницу по ссылке, которая дает правильный аргумент. Перейдите на страницу с формой для обновления. Обновление работает отлично. Отлично, теперь давайте поместим его в iFrame вместо ссылки на него. Я поместил это в iFrame на оригинальной странице. Откройте рамку. Не работает Я понятия не имею, что происходит, есть ли какая-то часть объяснения этому?
1 ответ
Используя метод iFrame, я действительно заставил его работать. Поскольку к iFrame требовалось добавить jQuery, для которого нужны кавычки, и URL-адрес iFrame, для которого также нужны кавычки, запись стала довольно запутанной, но это выполнимо. Выглядело так:
var myURL = "{{=URL('editEntry')}}/"+idArg.toString();
$('#window').append("<iframe src = " + myURL + " width='450' height='400'> </iframe>");
Это не красиво, но это работает.