RoR-使用Javascript动态呈现部分

RoR-使用Javascript动态呈现部分,javascript,ruby-on-rails,partial-views,Javascript,Ruby On Rails,Partial Views,我当前正在尝试在单击按钮时加载部分。所以我要做的是,在控制器操作中添加一个remote=>true,然后在一个.js.erb文件中添加一个format.js,我在其中执行以下操作: $('#videospan').html('<%= escape_javascript(render :partial => 'newpartial') %>'); 所以所有内容都正确发送,但为什么不显示呢?您最好将尽可能多的Javascript移到脚本文件中。一种方法是将功能分解为代码和配置数据

我当前正在尝试在单击按钮时加载部分。所以我要做的是,在控制器操作中添加一个remote=>true,然后在一个.js.erb文件中添加一个format.js,我在其中执行以下操作:

$('#videospan').html('<%= escape_javascript(render :partial => 'newpartial') %>');

所以所有内容都正确发送,但为什么不显示呢?

您最好将尽可能多的Javascript移到脚本文件中。一种方法是将功能分解为代码和配置数据:将代码放在.js文件中,将数据放在DOM或变量中:

// Option1 -- Using DOM
// my_function.js
function saveAll() {
  // code code code
  var url = $('#some_dom_element').attr('data-some-attribute-name');

  $.getJSON(url, 'blah blah');
}

# my_template.js.erb
<div id="some_dom_element" data-some-attribute-name="<%= save_answers2_course_lecture_path( @course, @lecture) %>">
</div>

// Option 2 -- Using a variable
// my_function.js
function saveAll() {
  // code code code
  $.getJSON(url, 'blah blah');
}

# my_template.js.erb
var url = '<%= raw(save_answers2_course_lecture_path( @course, @lecture) %>';
//选项1——使用DOM
//my_function.js
函数saveAll(){
//代码
var url=$('some#dom_element').attr('data-some-attribute-name');
$.getJSON(url,'blah-blah');
}
#my_template.js.erb
//选项2——使用变量
//my_function.js
函数saveAll(){
//代码
$.getJSON(url,'blah-blah');
}
#my_template.js.erb
var url='';

万一有人遇到问题。。这是因为我犯了一个错误。据此:


当.js.erb文件中存在错误时,代码将以静默方式失败。要检查错误,只需复制firebug的响应,将其发布到命令行并运行它。

什么意思是没有检测到newpartial中的javascript?jQuery不会检测到传递给
#html()
@johnnagle的字符串中有javascript代码。我的意思是,我在该部分中有一些javascript方法。当我调用它们时,找不到它们。@KaiKönig哦,好吧,还有其他方法可以传递部分以及它的javascript代码吗?发布在newpartialOk中定义的javascript,现在我像上面一样呈现部分,我想从那里访问javascript代码。我使用.js.erb尝试了您建议的方法,但我认为问题出在.js文件中。。更准确地说,我有一个onload方法,当呈现这个部分时需要调用它。。我该怎么做呢?如果您正在渲染javascript,那么当响应返回时,
.js.erb
中的任何内容都将在页面上运行。因此,您可以直接将javascript放入模板中,避免
onload
。。我试过了。。但我不知道为什么它不起作用。我将代码添加到问题中我看不出您添加的代码有任何错误。是否确实正在添加目标元素?也许可以尝试Firebug并在控制台中运行JS?是的,我用Firebug检查过。。如果没有最后2行,将渲染局部。。但是当我把它们加起来。。不是。。但是为了让视频正常工作,我需要这两行。。
$('#videospan').html('<%= escape_javascript(render :partial => 'newpartial') %>');
pop = Popcorn.youtube( "#youtube", lec ,{ width: 400, controls: 0});                           
pop.play();
$('#videospan').html(".........");
pop = Popcorn.youtube( "#youtube", http://www.youtube.com/... ,{ width: 400, controls: 0}); 
pop.controls( false );                          
pop.play();
// Option1 -- Using DOM
// my_function.js
function saveAll() {
  // code code code
  var url = $('#some_dom_element').attr('data-some-attribute-name');

  $.getJSON(url, 'blah blah');
}

# my_template.js.erb
<div id="some_dom_element" data-some-attribute-name="<%= save_answers2_course_lecture_path( @course, @lecture) %>">
</div>

// Option 2 -- Using a variable
// my_function.js
function saveAll() {
  // code code code
  $.getJSON(url, 'blah blah');
}

# my_template.js.erb
var url = '<%= raw(save_answers2_course_lecture_path( @course, @lecture) %>';