2014-05-01 148 views
0

在我的應用程序,我有包括該行作爲表的一部分的觀點:回調方法不評估

<td>{{=A('Callback test', callback=URL('jquery_test'), target=':eval')}}</td> 

jquery_test是做了這樣的方法:

def jquery_test(): 
    return "jQuery('#option_list').html('Example jQuery string');" 

這在web2py的早期版本中工作:字符串「示例jQuery字符串」被正確注入到視圖的option_list divison中。

今天早上,我意識到我在web2py的背後,我升級到了2.9.5穩定。現在,上面的代碼重定向返回的字符串:我用「jQuery('#option_list')。html('Example jQuery string');'在上面。該頁面的網址是

"http://127.0.0.1:8000/myApp/default/jquery_test" 

我不能說什麼升級改變了這種行爲,因爲我是從2.2出事到2.9.5。任何想法改變了什麼,以及如何改正它?

謝謝。

編輯了一些額外的信息......我已經更新了web2py.js(以及其他.js和.css文件,如適用),正如Anthony所建議的。

在視圖文件中使用這個回調:

<td>{{=A('Callback test', callback=URL('jquery_test'), target='options_list')}}</td> 

正確調用jquery_test方法和填充DIV ID = 'options_list'

使用這個回調:

<td>{{=A('Callback test', callback=URL('jquery_test'), target=':eval')}}</td> 

不調用jquery_test方法。它永遠不會執行。

我希望這提供了一些額外的線索。

回答

1

當您升級框架時,您還必須升級應用程序的/static文件夾中的web2py.js文件,因爲這是框架代碼的一部分,並且需要JavaScript/Ajax功能才能正常工作。

更新:看着舊的和新的代碼,它看起來像實現已經改變。確實,target=':eval'曾經工作(由於使用ajax()函數的幕後實現),但這不是一個記錄的功能。

作爲替代方案,您不應該將Ajax操作返回JavaScript來評估,而應該將JavaScript代碼添加到response.js,並且它將在客戶端上執行。

+0

謝謝,安東尼。我剛剛升級了應用程序的/ static文件夾中的web2py.js文件,但我仍然得到了描述的行爲:新的重定向視圖,而不是jQuery評估。還有什麼我需要更新? – johnz

+0

再次感謝安東尼。我會從response.js方法攻擊這個。我感謝您的幫助。 – johnz

+0

使用response.js的工作原理如Anthony所示。再次感謝您的幫助和見解! – johnz