Search and Top Navigation
#5341 closed bug (notabug)
Opened March 13, 2010 03:21PM UTC
Closed March 14, 2010 01:44AM UTC
Using #{...} in tabTemplate leads to errors in Ruby (on Rails)
| Reported by: | kosmas58 | Owned by: | |
|---|---|---|---|
| Priority: | major | Milestone: | 1.8 |
| Component: | ui.tabs | Version: | 1.8rc3 |
| Keywords: | Cc: | ||
| Blocked by: | Blocking: |
Description
Since ruby uses "#{variable}" to substitute a variable value in a sring, this interferes with jQuery tab syntax and leads to errors.
Example code (taken from original demo/manipulation.html and converted to haml syntax):
%style{:type => "text/css", :media => "screen"}
:plain
#dialog label, #dialog input { display:block; }
#dialog label { margin-top: 0.5em; }
#dialog input, #dialog textarea { width: 95%; }
#tabs { margin-top: 1em; }
#tabs li .ui-icon-close { float: left; margin: 0.4em 0.2em 0 0; cursor: pointer; }
#add_tab { cursor: pointer; }
:javascript
$(function() {
var $tab_title_input = $('#tab_title'), $tab_content_input = $('#tab_content');
var tab_counter = 2;
// tabs init with a custom tab template and an "add" callback filling in the content
var $tabs = $('#tabs').tabs({
tabTemplate: '<li><a href="#{href}">#{label}</a> <span class="ui-icon ui-icon-close">Remove Tab</span></li>',
add: function(event, ui) {
var tab_content = $tab_content_input.val() || 'Tab '+tab_counter+' content.';
$(ui.panel).append('<p>'+tab_content+'</p>');
}
});
// modal dialog init: custom buttons and a "close" callback reseting the form inside
var $dialog = $('#dialog').dialog({
autoOpen: false,
modal: true,
buttons: {
'Add': function() {
addTab();
$(this).dialog('close');
},
'Cancel': function() {
$(this).dialog('close');
}
},
open: function() {
$tab_title_input.focus();
},
close: function() {
$form[0].reset();
}
});
// addTab form: calls addTab function on submit and closes the dialog
var $form = $('form',$dialog).submit(function() {
addTab();
$dialog.dialog('close');
return false;
});
// actual addTab function: adds new tab using the title input from the form above
function addTab() {
var tab_title = $tab_title_input.val() || 'Tab '+tab_counter;
$tabs.tabs('add', '#tabs-'+tab_counter, tab_title);
tab_counter++;
}
// addTab button: just opens the dialog
$('#add_tab')
.button()
.click(function() {
$dialog.dialog('open');
});
// close icon: removing the tab on click
// note: closable tabs gonna be an option in the future - see http://dev.jqueryui.com/ticket/3924
$('#tabs span.ui-icon-close').live('click', function() {
var index = $('li',$tabs).index($(this).parent());
$tabs.tabs('remove', index);
});
});
Leads to the error message:
undefined local variable or method `href' for #<ActionView::Base:0x6172400>
So for ruby and rails it's needed to change the syntax.
Attachments (0)
Change History (1)
Changed March 14, 2010 01:44AM UTC by comment:1
| resolution: | → invalid |
|---|---|
| status: | new → closed |
You need to escape that specific part using a slash to avoid interpolation, i.e., \\#{...}.