我正在研究一个我想在服务器和浏览器中表达的逻辑.类似于验证表单的内容,根据已经输入的内容,元素之间必须存在某些逻辑关系.
所以...如果我可以编写一次逻辑并以某种方式结束Ruby和Javascript,我只需编写一次逻辑,而不必担心确保用不同语言编写的两段代码具有相同的功能行为.
显然,我不需要在Ruby中重现所有内容,一个简化可能是将一个通用的库(如Functional Javascript)移植到Ruby.
有没有人有RubyJS的经验?有人能指点我使用RubyJS的现有项目吗?提前致谢...
我非常热衷于尝试欧泊在一个新的Rails项目,当然风险是,我不会发现什么不能做,直到我花了数百个小时做别的一切,碰到砖墙我无法通过.
有什么限制?
例如(当然,如果还有其他限制需要提及,答案不应限于这些主题)我会假设您不能在您的蛋白石代码中使用任何旧的Ruby库(但我很想知道我错了!).
我猜也许在使用任意JavaScript库时可能会遇到困难,或者有些情况下需要编写JavaScript来与这些库进行交互.
当然,可能会有各种各样的问题,我甚至都没想到.这看起来像是一个了不起的项目,但我想知道如果我只是潜入头脑中,我可能会遇到什么样的问题.
可以将Ruby代码转换为Javascript吗?我听说过RubyJS,但这似乎与Ruby 1.9.2不兼容 - 是这种情况吗?
class Test
def initialize
end
def crash
print x
end
end
Test.new.crash
Run Code Online (Sandbox Code Playgroud)
很明显,这个代码片段会在第8行崩溃.如果你用Opal解析它,你将得到这个编译代码:
/* Generated by Opal 0.8.0.beta1 */
(function(Opal) {
Opal.dynamic_require_severity = "error";
var self = Opal.top, $scope = Opal, nil = Opal.nil, $breaker = Opal.breaker, $slice = Opal.slice, $klass = Opal.klass;
Opal.add_stubs(['$print', '$x', '$crash', '$new']);
(function($base, $super) {
function $Test(){};
var self = $Test = $klass($base, $super, 'Test', $Test);
var def = self.$$proto, $scope = self.$$scope;
def.$initialize = function() {
var self = this;
return nil;
};
return …Run Code Online (Sandbox Code Playgroud) 我正在使用ajax-datatables-rails。下面是我的数据表的JS。我想将javascript转换为等效的Opal.rb。
jQuery(document).ready(function() {
var table = $('#organizations-datatable');
var token = $('meta[name=csrf-token]').attr('content');
table.DataTable({
"processing": true,
"serverSide": true,
"ajax": {
"url": "/organizations/datatable.json",
"type": 'POST',
"beforeSend": function (xhr) {
xhr.setRequestHeader('X-CSRF-Token', token)
}
},
"pagingType": "full_numbers",
"destroy": true,
"columns": [
{"data": "name"},
{"data": "desc"},
{"data": "industry"},
{"data": "tags"}
],
"iDisplayLength": 25
});
});
Run Code Online (Sandbox Code Playgroud)
它包括将CSRF令牌添加到对数据的ajax请求中。
我希望我们所有的JavaScript都被编写为蛋白石,以提高可读性,等等。请不要争论这种选择,我只想了解如何通过opal / rails-ujs / opal-jquery将其用作Opalrb
下面的蛋白石与上面的JS不能实现相同的效果。谁能帮我理解原因?
jQuery(document).ready(function() {
var table = $('#organizations-datatable');
var token = $('meta[name=csrf-token]').attr('content');
table.DataTable({
"processing": true,
"serverSide": true,
"ajax": {
"url": "/organizations/datatable.json",
"type": 'POST',
"beforeSend": …Run Code Online (Sandbox Code Playgroud) 所以我看到团结支持c#,JS和Boo.
我可以学习其中的一个,但我想制作一个"编译器"或类似的东西,让我编写ruby代码,输出JS代码或创建一个可由Unity编译器读取的层.
这甚至是一种可能性.我愿意投入很多时间并拥有相当多的经验.
有opal-irb和opal-jquery和vienna,但有什么办法可以直接在通过猫眼石的浏览器中使用的宝石?
我正在编写一个基于html画布的简单游戏.我现在正从coffeescript移植到蛋白石.
我想以有效的方式包装CanvasRenderingContext2D对象.
我目前的解决方案是一个包装器,但我真的想让这个免费的桥接器.
app.rb:
class Game
def initialize
@canvas = Element.find('#canvas').get(0)
js_ctx = `this.canvas.getContext('2d')` # this is a javascript object
@ctx = CanvasRenderingContext2D.new(js_ctx) # create the proxy
@ctx.fillStyle='red'
@ctx.fillRect(10,10,50,50)
end
end
# the opal proxy class (named $CanvasRenderingContext2D in javascript space)
class CanvasRenderingContext2D
# I currently model the proxy as a has_a while I'd prefer it to be is_a
attr_reader :js # the native javascript object
def initialize(js)
@js = js
end
# getter
def fillStyle
`this.js.fillStyle`
end
# setter …Run Code Online (Sandbox Code Playgroud) 我已经阅读了所有可以找到的文档,它有点不稳定.有人能告诉我如何.html()在ruby -> jquery桥opal-jquery中使用jquery的方法吗?对于我将如何在未来稀疏记录的宝石中找出已实现的方法的任何建议肯定会受到赞赏.