如何使用三个引用级别代码来代表代码?

时间:2012-12-05 22:23:43

标签: javascript jquery ruby-on-rails

基本上我的控制器操作中有一个respond_to块:

respond_to do |format|
  format.js { render :js => "$('#test').html('<div class='colorize'>Test</div>');" }
end

我也尝试将css类colorize添加到将通过js呈现的div块,但使用引号会破坏代码。如何使用添加的类?

3 个答案:

答案 0 :(得分:5)

在这里避免一个巨大的头痛,除了最简单的JS之外,不要在你的红宝石处理程序中添加任何东西。

format.js { render :js => "colorizeTest()" }

然后在页面上或通过包含的脚本,声明一个函数:

var colorizeTest = function() {
  $('#test').html('<div class="colorize">Test</div>');
};

不要把JS放在你的Ruby中。


或者你可以使用真实的视图模板:

# controller code
@some_id = 'test'

# JS format Handler
format.js

# views/whatever.ejs.js
$('#<%= @some_id %>').html('<div class="colorize">Test</div>');

或两者都做!在这个例子中,这么多的抽象是愚蠢的,但只要这个JS开始做任何甚至稍微复杂的事情,这将是最好的方法。通过生成的js响应传递更多数据,减少代码。真正复杂的js逻辑应该始终静态地包含在页面上。

# controller code
@some_id = 'test'

# JS format Handler
format.js

// js funciton on page
var colorizeTest = function(id) {
  $('#' + id).html('<div class="colorize">Test</div>');
};

# views/whatever.ejs.js
colorizeTest(<%= @some_id %>);

最后,我可能还认为真正的“最佳”方式只是从服务器渲染JSON,并且你已经静态地包含了JS,它通过AJAX处理获取,并根据该数据处理页面的操作。这样你根本就不会“生成”可执行的javascript服务器端,这非常干净。

// js file somewhere
var colorizeTest = function(id) {
  $('#' + id).html('<div class="colorize">Test</div>');
};

var doStuff = function() {
  $.getJSON("/whatever.json", function(data) {
    colorizeTest(data.id);
  });
};

# rails controller
render :json => { :id => 'test' }

现在看看你的红宝石中有没有任何JS?或者你的JS中有任何红宝石吗?只需在服务器和客户端之间发送数据那个人很好。我喜欢它。

答案 1 :(得分:4)

反斜杠?

" ' \" \' \\\" \\\' \\\\\" \\\\\' ... \\\\\' \\\\\" \\\' \\\" \' \" ' "

答案 2 :(得分:3)

替代反斜杠,

%Q[$('#tes­t').html("­<div class­='colorize­'>Test</div>");]

然而,这是Ruby,而不是JavaScript。在纯JavaScript中,%q / %Q不可用。

编辑:另外,Alex Wayne对所有人都有最好的建议。