如何将JavaScript变量传递给Rails实例变量?
下面是.js.erb中的javascript如何将JavaScript变量传递给Rails实例变量?,javascript,ruby-on-rails-3,Javascript,Ruby On Rails 3,下面是.js.erb中的javascript $(document).ready(function () { var i = 888 $( "#previewpicture" ).html( "<%= escape_javascript( render( :partial => "show_picture", :locals => { :@v_url => 'i' } ) ) %>" ); }); @v_url在控制器
$(document).ready(function () {
var i = 888
$( "#previewpicture" ).html( "<%= escape_javascript( render( :partial => "show_picture", :locals => { :@v_url => 'i' } ) ) %>" );
});
@v_url在控制器中定义,警报在部分_show_picture.html.erb中
警报显示为i而不是888。什么是正确的语法:locals=>{:@v_url=>'i'}
谢谢
Clin您不能这样做,因为JavaScript是客户端语言,Ruby是服务器端语言。Ruby不仅在JavaScript之前被解析,而且在完全独立的机器上被解析,两者之间没有交互的方式
为您的问题制定一个替代解决方案。您不能这样做,因为JavaScript是客户端语言,Ruby是服务器端语言。Ruby不仅在JavaScript之前被解析,而且在完全独立的机器上被解析,两者之间没有交互的方式
找出解决问题的替代方案。这不起作用,因为JS是在页面显示在浏览器上之后执行的。但是,如果页面上需要依赖于Javascript条件或变量的内容,则应向服务器发出AJAX调用,获取标记并将其放置在页面中。这将不起作用,因为JS是在页面显示在浏览器上之后执行的。但是,如果页面上需要依赖于Javascript条件或变量的内容,则应该对服务器进行AJAX调用,获取标记并将其放置在页面中。正如Ryan Bigg所指出的,您不能这样做。但是,如果您需要在Rails所在的服务器端和JS所在的客户端中都存在某个值,那么最好将该值存储在服务器端 例如,在Rails控制器中可以有:
@i = 888
def create
...some logic
render :json => something
end
在js模板中:
var i = #{@i};
从技术上讲,这是将一个变量从Rails实例变量传递到JS变量。相反
如果要将JS变量从客户端传递到服务器,可以调用ajax请求将变量作为参数传递给服务器,然后让Rails响应要在页面上更新的模板。正如Ryan Bigg所指出的,您不能这样做。但是,如果您需要在Rails所在的服务器端和JS所在的客户端中都存在某个值,那么最好将该值存储在服务器端 例如,在Rails控制器中可以有:
@i = 888
def create
...some logic
render :json => something
end
在js模板中:
var i = #{@i};
从技术上讲,这是将一个变量从Rails实例变量传递到JS变量。相反
如果要将JS变量从客户端传递到服务器,可以调用ajax请求将该变量作为参数传递给服务器,然后让Rails使用要在页面上更新的模板进行响应。我喜欢jQuery原生数据交叉浏览键值存储来保存服务器端变量,这取决于某个对象。JS变量很好,但如果需要使用面向对象的变量,请尝试这种方法:
# erb file
<% javascript_tag do %>
var i = <%= server_variable %> // 888
var obj = $('#previewpicture');
var data = $.data(obj, "vars", {v_url: i})
<% end %>
<%= render :partial => "show_picture" %> #v_url will be assign by JS on page load
# js file
$(document).ready(function () {
$('#previewpicture').attr('v_url', data['v_url'])
})
我喜欢jQuery原生数据交叉浏览键值存储来保存服务器端变量,这取决于某个对象。JS变量很好,但如果需要使用面向对象的变量,请尝试这种方法:
# erb file
<% javascript_tag do %>
var i = <%= server_variable %> // 888
var obj = $('#previewpicture');
var data = $.data(obj, "vars", {v_url: i})
<% end %>
<%= render :partial => "show_picture" %> #v_url will be assign by JS on page load
# js file
$(document).ready(function () {
$('#previewpicture').attr('v_url', data['v_url'])
})
有可能将两者与雇员再培训局结合起来。例如,对于backbone.js:
#something.html.erb
<script>
function makeSomething() {
Something.create({
prop1: val1,
prop2: val2,
prop3: val3
});
}
</script>
有可能将两者与雇员再培训局结合起来。例如,对于backbone.js:
#something.html.erb
<script>
function makeSomething() {
Something.create({
prop1: val1,
prop2: val2,
prop3: val3
});
}
</script>
你可以尝试,它为你包装了一些函数,让你做得更容易你可以尝试,它为你包装了一些函数,让你做得更容易我不确定,因为我使用的是Python而不是Ruby,但我认为你做得不对。我的意思是,并不是说你的语法或诸如此类的错误,而是你用了错误的方式。我认为您不应该将客户端变量“传递”给服务器端函数。你可以把它们寄出去。或者去拿。我不确定,因为我使用的是Python而不是Ruby,但我认为你做得不对。我的意思是,并不是说你的语法或诸如此类的错误,而是你用了错误的方式。我认为您不应该将客户端变量“传递”给服务器端函数。你可以把它们寄出去。或者去拿。但不能“传递”它们。全局变量可以。另一种方法是使用jQuery本机键值存储$。另一种方法是使用jQuery本机键值存储$.data