1

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

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

我还尝试向将colorize通过 js 呈现的 div 块添加一个 css 类,但在那里使用引号会破坏代码。我如何使用添加的类来实现它?

4

3 回答 3

5

在这里为自己省去一个巨大的头痛,除了最简单的 JS 之外,不要在你的 ruby​​ 处理程序中添加任何东西。

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' }

看看现在你的 ruby​​ 中根本没有任何 JS 吗?或者你的 JS 中的任何红宝石?只是在服务器和客户端之间发送数据。不错的人 只是我喜欢它。

于 2012-12-05T22:27:53.567 回答
4

反斜杠?

" ' \" \' \\\" \\\' \\\\\" \\\\\' ... \\\\\' \\\\\" \\\' \\\" \' \" ' "
于 2012-12-05T22:25:31.377 回答
3

替代反斜杠,

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

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

编辑:另外,亚历克斯韦恩有最好的建议。

于 2012-12-05T22:27:22.210 回答