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');"
我想在 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');"