2013-07-31 20 views
1

我基本上有一個3級模板。
我想加載一個腳本標記從一個子模板動態加載到主模板中。Python/Mako:通過Ajax調用加載到主模板時,腳本標記不會從子模板中顯示

模板設置:

  • 所有的頁眉/腳本庫頁
  • 其中包含了新的腳本並加載插件二級模板
  • 其中包含窗口小部件3級模板

所有我想要做的是當第三級模板被加載,加載一個特定的JavaScript文件,所以我沒有沉重的頭部標記在我的基地t模板可能無法使用的JavaScript文件。

基本模板(頭標記):

<script type="text/javascript" src="/assets/scripts/jquery-1.9.1.js"></script> 
${next.javascriptIncludes()} 
<script type="text/javascript" src="/assets/scripts/modules/baseModule.js"></script> 



第二模板(當腳本標籤)

##conditional to determine if the template should inherit from the base page 
##it shouldn't inherit from the base page if it is being inserted into the page using ajax 
<%! 
def inherit(context): 
    if context.get('isPage'): 
     return "base_dashboard.mak" 
    else: 
     return None 
%> 
<%inherit file="${inherit(context)}"/> 

<%def name="javascriptIncludes()"> 
    <script type="text/javascript" src="/assets/scripts/libs/jquery.maskedinput-1.3.1.min.js"></script> 
</%def> 

## AJAX load 
%if isPage is False: 
    blah blah blah shows up 
    <script>s</script> 
    <h1>H1 shows up</h1> 
    <p style="color:red;">P tag shows up in red</p> 
    <link rel="stylesheet" href="/assets/css/main.css" type="text/css"><- This shows up 
    <div><script type="text/javascript" src="/assets/scripts/libs/jquery.maskedinput-1.3.1.min.js"></script></div> 
    Script tag above is missing... 
%endif 

<div id="dashboard-profile-container"> 
<%include file="widgets/profile_widget.mak" /> 
</div> 

enter image description here enter image description here enter image description here

3模板(窗件)

Just HTML 


問題:腳本標籤是沒有得到包括在基礎模板的頭

會如何你處理這個問題?

+1

在這種情況下什麼是「下一個」?這確實是一個內置的python函數,你應該避免名稱衝突。你不能用不同的名字嗎? – 2013-07-31 14:31:21

+0

你是對的,我沒有繼承任何東西,所以不需要使用NEXT ...更新新信息的問題 –

回答

2

我的理解是,jQuery的評估和鋼帶從裝有AJAX一個HTML片段都<script>標籤,但在現階段,我無法找到的,在jQuery的文檔證明:

「HTML 「:以純文本形式返回HTML;包含的腳本標記在插入DOM時評估爲 。

然而,這裏是是in John Resig's own words

當腳本節點插入到它也執行 (由jQuery的)文檔。爲了避免以後重新執行它(這發生了很多,因爲它發生了),腳本就從文檔中刪除了。

當然,當您實際上想要查看腳本元素的 內容(就像您這樣做)時,會導致一些問題。不過,我認爲 權衡在這種情況下更好。

我能想到的一種替代解決方案是使用 內部.data()API將信息附加到腳本元素 ,通知它不應該在以後再次執行。不過,我不是 。

所以,至少,jQuery的使用在2009年

剝離<script>代碼來驗證您可以使用Firebug等,以確認您的應用程序確實會返回一個HTML的blob與<script>標籤包括 - 如果你確認這一點,那麼它完全與Mako金字塔無關

+0

啊!在我們的loadResource(加載模板)函數中,我使用了這個:'var $ content = $($。parseHTML(response.trim()));'必須刪除腳本標記。嗯,我相信我們正在研究Require.js以獲得更好的解決方案。感謝它目前的立場,我們不能使用上面的代碼來解決我們目前的問題。 –

+0

對於有類似問題的其他人,這是我們要使用的:http://requirejs.org –

2

接下來是繼承鏈中的下一個模板。沒有命名衝突。第二個模板做一個include,所以next是null(繼承鏈中沒有第三個層)。因此,對象沒有屬性。