在ajax之后, web2py加载控制结束

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (42)

我正在使用web2py。

我运行ajax调用并希望从数据库更新某些selectbox值。我调用一个控制器并返回一个带有选项的selectbox,所有这些都是成功创建的。

我想在完成加载后将创建/返回的选择框转换为选定的选择框否则它将恢复为常规选择框。

我试过了:

  • 听'DOMSubtreeModified'(和其他类似事件),然后激活选定的行但是,这些运行得太频繁,我必须知道何时完全启动了具有所有选项的选择框。我可以在每次改变时强制启动,这很糟糕 - 消耗资源而且完全错误。
  • 在ajax return('ajax:complete'事件)上启动一些回调,但是,再次 - 这并不能保证html控件完全启动,如本答案中所述(并经过测试)。
  • 我试图为select控件设置一个onload事件。

主要代码:

JavaScript调用:

ajax('{{=URL('controller_name', 'func_name')}}', ['param1'], 'target_div');

Python控制器返回(这将返回一个select控件,其中包含启动的选项对象并覆盖target_div内部html):

return SELECT(distinct_values, _id = 'manual_group_selectbox' , _multiple = 'true' , _class='SelectBoxSingleDisabled');

寻找面向web2py的解决方案。谢谢!

提问于
用户回答回答于

有几个选项(建议前两个):

  1. 在控制器中,将选择的初始化代码添加到response.js- 这将在将返回的HTML添加到DOM后执行。
  2. 将选择的初始化代码添加到select元素后面的script元素中: CAT(SELECT(distinct_values, _id = 'manual_group_selectbox' , _multiple = 'true' , _class='SelectBoxSingleDisabled'), SCRIPT('[Chosen code]'))
  3. ajax()函数的第三个参数可以是一个Javascript函数,它接受服务器返回的数据。因此,可以编写一个函数,将返回的HTML添加到DOM中,然后初始化Chosen: ajax( '{{=URL('controller_name', 'func_name')}}', ['param1'], function(html) { [add html to DOM] [initialize Chosen] } );

扫码关注云+社区

领取腾讯云代金券