点击链接时我需要更新多个目标。 此示例构建链接列表。 单击链接时,回调需要填充.html文件的两个不同部分。
实际应用使用散景进行绘图。 用户将点击一个链接,'linkDetails1'和'linkDetails2'将保存脚本,div返回调用bokeh.component() 用户将单击一个链接,从bokeh的component()函数返回的脚本div将填充'linkDetails'。
显然这种天真的方法不起作用。 如何创建链接列表,单击该链接时将填充.html文件中的两个单独位置?
################################
#views/default/test.html:
{{extend 'layout.html'}}
{{=linkDetails1}}
{{=linkDetails2}}
{{=links}}
################################
# controllers/default.py:
def test():
"""
example action using the internationalization operator T and flash
rendered by views/default/index.html or views/generic.html
if you need a simple wiki simply replace the two lines below with:
return auth.wiki()
"""
d = dict()
links = []
for ii in range(5):
link = A("click on link %d"%ii, callback=URL('linkHandler/%d'%ii), )
links.append(["Item %d"%ii, link])
table = TABLE()
table.append([TR(*rows) for rows in links])
d["links"] = table
d["linkDetails1"] = "linkDetails1"
d["linkDetails2"] = "linkDetails2"
return d
def linkHandler():
import os
d = dict()
# request.url will be linked/N
ii = int(os.path.split(request.url)[1])
# want to put some information into linkDetails, some into linkDiv
# this does not work:
d = dict()
d["linkDetails1"] = "linkHandler %d"%ii
d["linkDetails2"] = "linkHandler %d"%ii
return d
答案 0 :(得分:0)
我必须承认,我不是100%明确你要在这里做什么,但如果你需要更新,例如为了响应单击,页面中有2个div元素,有几种方法可以实现这一点。
最简单,也可以说是最web2py的方法是将目标包含在外部div中,该div是更新的目标。
另一个非常强大的替代方案是使用像Taconite [1]这样的东西,你可以用它来在一个响应中更新DOM的多个部分。
答案 1 :(得分:0)
在这种情况下,看起来您不需要Ajax调用将内容返回到DOM的两个独立部分。相反,返回的两个元素(脚本和div元素)可以简单地放在单个父div中。
# views/default/test.html:
{{extend 'layout.html'}}
<div id="link_details">
{{=linkDetails1}}
{{=linkDetails2}}
</div>
{{=links}}
# controllers/default.py
def test():
...
for ii in range(5):
link = A("click on link %d" % ii,
callback=URL('default', 'linkHandler', args=ii),
target="link_details")
...
如果为A()
提供“目标”参数,则Ajax调用的结果将进入具有该ID的DOM元素。
def linkHandler():
...
content = CAT(SCRIPT(...), DIV(...))
return content
在linkHandler
中,您可以简单地返回一个web2py HTML帮助程序,它将自动序列化为HTML,然后插入到目标div中,而不是返回字典(需要视图才能生成HTML)。 。 CAT()
帮助器简单地连接其他元素(在本例中,您的脚本和相关的div)。