存档
     

学习卡拉特拉娃

我最近一直在和卡拉特拉娃玩, 这很有趣。最令人兴奋的方面是他们的跨平台的方法。他们推动可重用中间件 (例如共享应用程序逻辑), 同时保留 ui 层本机。

共享逻辑

有趣的是, 共享逻辑是在咖啡脚本。因此, 它甚至可以在其他平台上共享, 如 embr. js 和 node. js–前提是逻辑在本质上足够可重用。

到目前为止, 我唯一的抱怨是该项目的文件不差。例如, calatrava 支持 ios 和 android 上的本机 ui, 但通过运行 calatrava 创建 myapp 生成的示例应用程序仅在 ios 上显示本机 ui。生成的 android 应用程序正在使用 web 视图。

首先, 您需要更改转换窗体类 (位于 droid/myappc mypp/mypp/) 从 com.calatrava.bridge.RegisteredActivity 继承。所以, 这一点:

成为:

接下来, 您将主要了解转换窗体的现有实现 (离开 getagename 方法, 其他一切都将继续), 并重写 getfieldvalue 和呈现:

getfieldvalue 方法是咖啡脚本和本机脚本之间的桥梁。具体而言, 它允许 calatrava 知道屏幕上当前有哪些值。因此, 对于文本字段, 它可能如下所示:

((edittext) 这. findviewbyid (R.id.my _ field). gettext (). tostring ();

因此, 为了编写此方法, 您需要创建一个布局文件。调用它转换 _ form. xml, 并将其置于 droidres·ret布局下:

现在重新访问该操作, 并覆盖在 "创建" 上:

如果你现在通过运行 rake droid 来运行应用程序: 部署你会使用你的自定义视图变灰, 但它还不能正常工作。有了它, 让我们重新审视我们的 getfielvalue 方法。

如果你看一下 ios 示例应用, 你会知道应该如何实现此方法:

或者, 您可以查看 kernel/app/转换器下的 controller.converter.coffee, 并查找对 views.conversionForm.get 的所有调用, 以查看此控制器引用的视图控件。在这种情况下, 它引用:

  • 以 _ 货币
  • 出 _ 货币
  • 金额为 _

让我们通过实现 getfieldvalue 方法将这些连接到我们的布局:

现在, 让我们对输入和输出货币类型进行硬编码。然而, 我们已经实现了 "量" 字段, 因此我们实际上是将我们的本地视图连接到 calatrava (尽管只是在一个方向上)。为了在 coffescript 视图控制器中触发事件, 我们将使用 com.calatrava.bridge.RegisteredActivity.triggerEvent (string 事件, string..。外) 方法。幸运的是, 我们的活动是注册活动, 因此我们可以调用触发器。这样做将直接调用 coffecript 方法, 传递任何参数。在我们的例子中, 我们要调用转换方法, 我们不需要传入任何参数。用类似的命名方法包装这一点, 可以让我们:

最后, 拼图的最后一部分是完全实现渲染方法, 以便可以将值从 calatrava 传递到您的本机视图中。在 android calatrava 上, 将提供一个包含 json 的字符串, 它取决于 render 的实现来解析它。除了 ios 和 android 之间的微小差异外, 再看看转换窗体视图. m 揭示了此方法的意图:

在 key/值上循环, 呈现方法将尝试将每个键与 ui 元素的名称匹配并绑定其值。android 的实现如下所示:

不幸的是, 按原样运行此代码会导致运行时错误。似乎卡拉特拉娃从ui 线程调用渲染, 导致以下崩溃:

E/AndroidRuntime(13246): org.mozilla.javascript.WrappedException: 包装 android.view.ViewRootImpl $calledfromw失r翼 threadexception: 只有创建视图层次结构的原始线程才能触摸其视图。(calatrava/scripts/bridge.js#34)

解决此问题的一个方法是将 ui 更新包装在运行器中, 以确保它们在主线程上执行。为了保持代码的干净, 您可以将呈现实现分解为辅助方法 (我称之为矿 setfielvalue):

在这一点上, 你应该有一个功能本机 ui, 虽然硬编码, 只转换美元到澳元 (点击这里看看目前的转换形式. java 是什么样子)。在以后的帖子中, 我将继续实现此本机 ui。

About Jason

Jason 是一位经验丰富的企业家和软件开发商, 在石油和能源行业有丰富的工作经验。精通领导力、移动开发、数据同步和 saas 架构。强大的工程专业, 阿肯色州立大学计算机科学学士学位。
View all posts by Jason →

发表评论

电子邮件地址不会被公开。 必填项已用*标注