0

我正在使用 django 版本 1.82 和 django-pipeline。我按名称从 html 调用特定的 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 
4

2 回答 2

1

你确定这search()是一个全局函数吗?为确保您可以将其分配给window变量:

window.search = function() {
    ...
}
于 2016-03-23T12:30:09.573 回答
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 的浏览器会获得一个可读的错误页面。

于 2016-03-23T12:42:40.827 回答