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

web2py: Ajax callback search functional as a Component (LOAD)

我想在 views/div 中包含一个搜索功能作为一个组件,以便在不同的视图中重复使用它。为此,我使用带有 ajax 回调生成的结果列表的搜索,类似于 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 回调的功能吗?

问候 克莱门斯

很遗憾,书上的例子有错误

_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');"