首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法使用deform_bootstrap实现AJAX表单提交(内联成功)

无法使用deform_bootstrap实现AJAX表单提交(内联成功)
EN

Stack Overflow用户
提问于 2013-08-06 11:36:15
回答 1查看 335关注 0票数 0

在给定AJAX表单提交(内联成功)的情况下,我试图将Ajax表单提交实现为上下文,但它在我的示例中不起作用,这是我的代码。

代码语言:javascript
复制
@view_config(route_name='add_user', permission='admin', renderer='add_user.mako')
def add_user(self):

   #adding succeed method as per given context in above link. 
    def succeed():
        return Response('<div id="thanks">Thanks!</div>')

    schema = UserSchema(validator = user_DoesExist).bind(request=self.request)
    #Form defined with use_ajax=True.
    form = deform.Form(schema, action=self.request.route_url('add_user'), buttons=('Add User','Cancel'), use_ajax=True)

    if 'Cancel' in self.request.params:
        return HTTPFound(location = self.request.route_url('home'))

    if 'Add_User' in self.request.params:
        appstruct = None
        try:
            appstruct = form.validate(self.request.POST.items())
        except deform.ValidationFailure, e:
            log.exception('in form validated')
            return {'form':e.render()}

        newuser = User(username=appstruct['username'], 
                       name=appstruct['name'], 
                       extension=appstruct['extension'], 
                       pin=appstruct['pin'], 
                       status=1)

        DBSession.add(newuser)
        DBSession.flush()
        return dict(form=form.render(success=succeed))
    return dict(form=form.render(appstruct={}))

输出:表单提交代码上的被执行,但屏幕上的表单保持不变,但不执行()方法。:(

如果尝试使用与上述链接中所述完全相同的上下文,如

代码语言:javascript
复制
@view_config(route_name='add_user', permission='admin', renderer='add_user.mako', name='ajaxform')
@demonstrate('AJAX form submission (inline success)')
def ajaxform(self):

    #adding succeed method as per given context in above link. 
    def succeed():
        return Response('<div id="thanks">Thanks!</div>')

    schema = UserSchema(validator = user_DoesExist).bind(request=self.request)
    #Form defined with use_ajax=True.
    form = deform.Form(schema, action=self.request.route_url('add_user'), buttons=('Add User','Cancel'), use_ajax=True)

    if 'Cancel' in self.request.params:
        return HTTPFound(location = self.request.route_url('home'))

    if 'Add_User' in self.request.params:
        appstruct = None
        try:
            appstruct = form.validate(self.request.POST.items())
        except deform.ValidationFailure, e:
            log.exception('in form validated')
            return {'form':e.render()}

        newuser = User(username=appstruct['username'], 
                       name=appstruct['name'], 
                       extension=appstruct['extension'], 
                       pin=appstruct['pin'], 
                       status=1)

        DBSession.add(newuser)
        DBSession.flush()
        return self.render_form(form, success=succeed)
    return dict(form=form.render(appstruct={}))

输出: NameError:名称“演示”未定义

如果我删除这一行@演示(‘AJAX表单提交(内联成功)’)

比我给我的错误

AttributeError:'UsersView‘对象没有属性'render_form'

使用deform_bootstrap执行ajax表单提交需要帮助。

谢谢,

如果我在某个地方错了,请纠正我。:)

EN

回答 1

Stack Overflow用户

发布于 2014-05-12 11:49:38

我也有过同样的问题。问题是表单的呈现函数实际上没有接受成功关键字参数,即

代码语言:javascript
复制
form.render(success='<div>here</div')

并不会像你想的那样。如果您查看演示代码,您可以看到它们调用了另一个函数。

代码语言:javascript
复制
self.render_form(form, success='<div>here</div>')

这是一个与表单呈现函数完全独立的函数。它处理调用(让我们假设一个有效的post),然后如果验证是成功的,检查是否定义了“成功”,并将其作为响应对象中的HTML返回。否则,它将在响应对象中返回'form.render‘。

希望这能有所帮助。

基思

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18079117

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档