web2py:Ajax回调搜索功能组件(LOAD)

时间:2016-10-05 21:16:53

标签: web2py

我希望在views / div中包含搜索功能作为组件,以便在不同视图中重用它。为此,我使用了一个带有ajax-callback生成的结果列表的搜索,类似于reference manual中描述的wiki页面搜索。

# for standalone search
# @auth.requires_login()
# for seach as a component
@auth.requires_signature()
def search():
    model_id = request.args(0,cast=int)
    form = FORM(T('Node Criteria: '), INPUT(_id='keyword',_name='keyword',
                                                        _onkeyup="ajax('callback', ['keyword'], 'nodes_in_model_result_div');"))

    # for standalone search
    # target_div =DIV(_id='nodes_in_model_result_div')

    return dict(form=form) #, target_div=target_div)


def callback():
    if (request.vars.keyword==''):
        query = db.node.title
    else:
        query = db.node.title.contains(request.vars.keyword)

    nodes = db(query).select(db.node.id, db.node.title, orderby=db.node.title)
    table = [TR(node.id, node.title) for node in nodes]

    return TABLE(THEAD(TR(TH('Node ID', _width="30%"), TH('Node'), _height="5")),
             TBODY(*table),
             _class='table table-bordered table-striped', _cellspacing="0", _width="100%", _id='nodes_in_model_table')

当独立使用搜索(serach.html)时,一切正常。但是作为通过LOAD()嵌入的组件(search.load),如下所示,搜索不起作用:

{{=LOAD('default','search.load', args=[model_id], target='nodes_in_model_div', ajax=True, user_signature=True)}}

然后在调用视图中定义相关的DIV。 search.load只包含 {{= form}} ,其中search.html如下:

{{extend 'layout.html'}}
<h1>Search Node</h1>
{{=form}}
<br>
{{=target_div}}

有人知道如何在web2py组件中使用Ajax回调嵌入功能吗?

此致 克莱门

1 个答案:

答案 0 :(得分:1)

不幸的是,书籍示例中存在错误。

_onkeyup="ajax('callback', ['keyword'], 'nodes_in_model_result_div');"

在上面的代码中,'callback'是相对URL,因此它会附加到父页面的URL。相反,您必须提供完整的URL路径,您应该使用URL()帮助程序:

_onkeyup="ajax('%s', ['keyword'], 'nodes_in_model_result_div');" % URL('default', 'callback')

在呈现的HTML中,它将如下所示:

onkeyup="ajax('/default/callback', ['keyword'], 'nodes_in_model_result_div');"