2016-03-23 3 views
0

django-1.82をdjango-pipelineで使用しています。私は特定のjavascript関数をhtmlから名前で呼び出します。django-pipelineでjavascript関数のネームマングリングを防ぐ方法

<form class="navbar-form navbar-right vcenter" 
action="javascript:search();" role="search" id='searchform'> 

残念なことに、圧縮されたjsファイルでは、関数名が変更されてフロントエンド機能が動作しません。どのように私はその関数の同じ名前を維持するか、htmlのjs関数への参照をどのように変更するのですか?

私はyuglifyインストールされていると私が使用した設定が

PIPELINE_CSS = { 
'allstyles': { 
    'source_filenames': (
     'css/application.css', 
     'feedback/css/feedback-form.css', 
    ), 
    'output_filename': 'css/nifty.css', 
    'extra_context': { 
     'media': 'screen,projection', 
    }, 
}, 
} 

PIPELINE_JS = { 
'actions': { 
    'source_filenames': (
     'js/nifty.js', 
     'feedback/js/feedback-form.js', 
    ), 
    'output_filename': 'js/nifty.js', 
} 
} 
STATICFILES_STORAGE = 'pipeline.storage.PipelineStorage' 
PIPELINE_JS_COMPRESSOR = 'pipeline.compressors.yuglify.YuglifyCompressor' 
PIPELINE_DISABLE_WRAPPER = True 
PIPELINE_ENABLED=True 

答えて

1

であるあなたがsearch()がグローバル関数であることを確認していますか?必ずwindow変数に割り当てることができようにするには:

window.search = function() { 
    ... 
} 
1

私はそれを他の方法で回避にしてください。

<form ... action="/nojs.html" ... id='searchform'> 

を入力し、フォームのsubmitイベントを代行受信します。

(function(){ 
    var sf = document.getElementById('searchform'); 
    sf.addEventListener('submit', function(ev){ 
     ev.preventDefault(); 
     // do here whatever "search()" needs to do 
    }); 
})(); 

あなたは、window名前空間に何も追加する必要が縮小さ関数名とは無関係である、と無効JSとブラウザが読めるエラーページを取得していないこの方法。

関連する問題