如何在Ruby中调用JavaScript:Bowline Proxy API完整指南(附示例)

发布时间:2026/8/24 17:28:11
如何在Ruby中调用JavaScript:Bowline Proxy API完整指南(附示例) 如何在Ruby中调用JavaScriptBowline Proxy API完整指南附示例【免费下载链接】bowlineRuby/JS GUI and Binding framework (deprecated)项目地址: https://gitcode.com/gh_mirrors/bo/bowlineBowline 是一个面向桌面端的 Ruby/HTML/JS GUI 绑定框架让你用 Web 技术写界面、用 Ruby 写逻辑。本文聚焦 Bowline Proxy API 的完整用法如何从 Ruby 侧调用 JavaScriptcall/res/赋值三大模式、如何在 Binder 中使用代理快捷方式以及 JavaScript 如何反向调用 Ruby 方法全部配可直接运行的示例新手也能快速上手 。什么是 Bowline Proxy APIBowline 把桌面应用拆成三层HTML/JavaScript 负责视图Ruby 负责业务逻辑中间的绑定层负责两端通信。Proxy API 正是这条通信通道中Ruby → JavaScript的方向Proxy代理在 Ruby 中链式书写一行 JavaScript框架负责在正确的窗口、正确的时机执行Bridge桥反向通道让 JavaScript 安全地调用 Ruby 方法Binder绑定器把数据模型与 HTML 元素自动同步的胶水层是日常使用 Proxy 最频繁的地方核心实现位于lib/bowline/desktop/proxy.rb反向调用的入口在lib/bowline/desktop/bridge.rb。快速上手Ruby 调用 JS 的 3 种模式Proxy 通过method_missing收集你点出来的每一段 JS 表达式最终拼成一条完整的脚本注入到窗口中执行。只需记住两个终结词call调函数res取值。proxy.FooObject.hi(1, 2, 3).bye.call # 执行链式函数调用 FooObject.hi(1,2,3).bye() proxy.FooObject.messages.res # 求值变量返回 JS 侧的值 proxy.FooObject.messages.res do |result| puts Messages are: #{result} # 也可用回调块异步接收结果 end proxy.FooObject.messages [1, 2, 3] # 赋值语句以 结尾会立即执行三个要点模式写法规则典型场景函数调用末尾加.call触发 JS 副作用弹窗、动画、发请求变量求值末尾加.res读取页面上某个对象的状态赋值以结尾自动执行从 Ruby 向 JS 写入配置数据 参数会先经过JSON 序列化再传入因此只能传Hash、Array、String、Integer四类对象——这也是 JS 侧收到数据时的格式。Binder 里的代理快捷方式最常用场景日常开发中你很少手动Proxy.new因为 Binder 内置了三个现成的代理入口见lib/bowline/binders.rbclass UsersBinder Bowline::Binders::Base bind User def destroy self.item.destroy self.element.remove # element 是该用户对应的 jQuery 元素 page.alert(删除成功).call # page页面 JS 代理 end end三个快捷方式各管一摊page代理整个页面可调用任意全局 JS 函数如page.alert(hello).callbowline代理框架自身的 JS 对象Bowline用于替换/更新绑定数据jquery代理jQuery例如jquery.getJSON(url).call直接发 Ajax与之配合前端只需一行 JS 即可反向触发上面的 Ruby 方法参见examples/example.js$(#users).invoke(destroy); // 调用某条记录的实例方法 $(#users).invoke(admins); // 调用集合级方法反向调用JavaScript 如何调用 RubyBridgeProxy 只管单向JS 调 Ruby 则由Bridge完成。机制很清晰JS 发送一条 JSON 消息{klass, method, args}Ruby 侧检查该类是否暴露过这个方法安全才执行。class FooClass extend Bowline::Desktop::Bridge::ClassMethods js_expose # 一键暴露给 JS def self.foo :bar end endBowline.invoke(FooClass, foo, function(res){ console.log(res); // 回调接收 Ruby 的返回值 });两个实用细节继承自Bowline::Binders::Base的类默认已调用js_expose所以你的 Binder 方法前端直接invoke即可无需任何配置未被暴露的方法会抛出Method not allowed这是框架内置的安全闸门 ⚠️原理与避坑指南 ⚠️1. 脚本是排队执行的不是立即执行call/res触发的脚本会先进入队列lib/bowline/desktop/js.rb等对应窗口加载完毕loaded?才真正注入执行。窗口没就绪时调用不会报错只会延后——这是新手最常见的为什么没反应原因。2. 分清call与rescall末尾会自动补()把表达式当函数执行res则把表达式当变量求值。拿函数当变量取res拿到的是函数引用而非执行结果。3. 多窗口注意限制一个 Binder 可能被多个窗口同时绑定此时page会把脚本广播到所有窗口但无法返回值框架会直接抛出Cant return from multiple windows此时请避免使用.res。4. 返回值同样走 JSONJS 侧结果经JSON.parse还原后交给你的回调块true/false有专门处理其余按 JSON 解析。所以 Ruby 侧拿到的true是布尔不是字符串。相关源码文件一览想深入阅读实现推荐按这个顺序lib/bowline/desktop/proxy.rb—— Proxy 的call/res/链式收集逻辑lib/bowline/desktop/bridge.rb—— JS→Ruby 的消息解析与安全校验lib/bowline/desktop/js.rb—— 脚本队列与轮询执行机制lib/bowline/binders.rb—— Binder 基类及page/bowline/jquery代理examples/example.js、examples/tweets_binder.rb—— 前后端配合的完整小例子assets/bowline.js—— 前端绑定库bowlineChain/invoke的实现如果希望直接上手先阅读根目录的README.txt里面有一个从生成项目到运行 Twitter 客户端的完整流程git clone https://gitcode.com/gh_mirrors/bo/bowline总结Bowline Proxy API 的精髓可以浓缩为一句话用 Ruby 的写法说JavaScript——链式拼表达式、call执行、res取值、赋值配合 Binder 的page/bowline/jquery三个快捷代理和 Bridge 的反向通道Ruby 与 JS 的双向通信就完成了。框架帮你处理了时机排队、JSON 序列化和安全校验你只需专注业务逻辑 ✅。【免费下载链接】bowlineRuby/JS GUI and Binding framework (deprecated)项目地址: https://gitcode.com/gh_mirrors/bo/bowline创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考