2016-03-23 8 views
0

Ich benutze Django Version 1.82 mit Django-Pipeline. Ich benenne eine bestimmte JavaScript-Funktion von HTML nach Namen.Wie verhindert man Namensverfälschung von JavaScript-Funktionen in Django-Pipeline

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

Leider gibt es in der komprimierten Datei js, wird der Name der Funktion geändert und damit die Frontend-Funktionalität workig nicht. Wie behalte ich den gleichen Namen für diese Funktion oder wie ändere ich den Verweis auf die Funktion js in HTML?

Ich habe yuglify installiert und die Einstellungen verwenden I

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 

Antwort

1

Bist Du sicher, dass search() eine globale Funktion ist? Um sicherzustellen, können Sie ordnen es den window Variable:

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

ich es anders machen würde um.

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

und dann abfangen das submit Ereignis auf dem Formular.

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

Auf diese Weise brauchen Sie nicht alles, was in den window Namespace hinzuzufügen, sind unabhängig von minimierte Funktionsnamen und ein Browser mit behinderter JS bekommt eine lesbare Fehlerseite.

Verwandte Themen