Мне нужно обновить несколько целей при щелчке ссылки. В этом примере создается список ссылок. Когда ссылка нажата, обратный вызов должен заполнить две разные части .html-файла.Обработка ссылок web2py A() с несколькими целями
Фактическое приложение использует боке для печати. Пользователь будет нажимать на ссылку, 'linkDetails1' и 'linkDetails2' проведут скрипт и div возвращаются из вызовов на bokeh.component() Пользователь нажимает на ссылку, а скрипт div возвращается из компонента bokeh() будет заполнять '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
Если вы добавите «целевой» аргумент в помощник 'A()', HTML, возвращаемый вызовом Ajax, будет вставлен в элемент HTML, чей идентификатор соответствует «target». Если вы хотите добавить некоторый контент в другой элемент, вы можете написать код Javascript для его обработки и вернуть Javascript через 'response.js'. Однако неясно, что вы хотите поместить туда, поскольку вы не указали свой код представления и не объяснили, что должно произойти с двумя ключами linkDetails в возвращаемом dict. Это помогло бы, если бы вы могли показать код представления и более четко указать желаемый результат. – Anthony
Anthony, код просмотра находится в верхней части списка кодов. Щелчок по ссылке A() должен обновить информацию в двух полях linkDetails1 и linkDetails2. Это урезанная тестовая программа. В реальном приложении ссылки будут отображать разные графики боке. Код построения bokeh возвращает div с случайным идентификатором и скриптом, который ссылается на этот идентификатор. Надеюсь, это яснее. –
Да, но в представлении отсутствует linkDiv, а два элемента linkDetails - это только текстовые узлы, поэтому трудно точно понять, чего вы пытаетесь достичь. Кроме того, вы не указали представление для linkHandler. Чтобы создать графики Bokeh, вам нужно вернуть код HTML или JS?Какой контент находится в linkDiv (и что/где - ссылкаDiv)? – Anthony