nfm*_*nfm 2 jquery overriding unobtrusive-javascript ruby-on-rails-3
我的Javascript不是很划清楚,我正在努力覆盖提供的功能rails.js.
我想a[data-confirm]使用jQuery UI模式对话而不是vanilla javascript 来修改处理方式confirm().
相关功能rails.js是allowAction(element).如果我在另一个文件中定义它,我可以成功地从firebug控制台调用它,但rails.js仍然从具有data-confirm属性的锚点调用该版本.
我认为这是因为整个rails.js文件包含在:
(function($) {
...
})( jQuery );
Run Code Online (Sandbox Code Playgroud)
是否有一种合理的方法来覆盖此功能,而无需修改提供的功能rails.js?
编辑:
在呼叫rails.js到allowAction被包裹在一个.live呼叫:
$('a[data-confirm], a[data-method], a[data-remote]').live('click.rails', function(e) {
var link = $(this);
if (!allowAction(link)) return false;
if (link.attr('data-remote')) {
handleRemote(link);
return false;
} else if (link.attr('data-method')) {
handleMethod(link);
return false;
}
});
Run Code Online (Sandbox Code Playgroud)
我也尝试过包括我之前和之后的javascript rails.js,但无济于事.
编辑:
所以,如果我打电话,.die('click.rails')我可以重新定义整个click.rails事件,但不会调用原始handleRemote()和handleMethod()函数.
仅供参考,我刚刚在Rails jquery-ujs中添加了一个外部API,正是为了这类.您现在可以通过插入(并重写1行)$.rails.allowAction函数使rails.js使用自定义确认方法.
请参阅我的文章,Rails jQuery UJS:Now Interactive,以获得有关示例的完整说明.
编辑:现在,在此提交中,confirm可以以相同的方式覆盖对话框函数.例如
$.rails.confirm = function(message) { return myConfirmDialog(message); };
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3216 次 |
| 最近记录: |