在 Nashron 中使用 Backbone.js

    这个例子展示了如何在Java8的Nashron JavaScript引擎中使用Backbone.js模型。Nashron在2014年三月首次作为Java SE 8 的一部分发布,并通过以原生方式在JVM上运行脚本扩展了Java的功能。对于Java Web开发者,Nashron尤其实用,因为它可以在Java服务器上复用现有的客户端代码。传统的Node.js具有明显优势,但是Nashorn也能够缩短JVM的差距。

    当你在HTML5前端使用现代的JavaScript MVC框架,例如时,越来越多的代码从服务器后端移动到Web前端。这个方法可以极大提升用户体验,因为在使用视图的业务逻辑时节省了服务器的很多往返通信。

    Backbone允许你定义模型类,它们可以用于绑定视图(例如HTML表单)。当用户和UI交互时Backbone会跟踪模型的升级,反之亦然。它也能通过和服务器同步模型来帮助你,例如调用服务端REST处理器的适当方法。所以你最终会在前端实现业务逻辑,将你的服务器模型用于处理持久化数据。

    首先,我们在Java中定义实体类。这个类可用于数据库的CURD操作(增删改查)。要记住这个类是个纯粹的Java Bean,不实现任何业务逻辑,因为我们想让前端正确执行UI的业务逻辑。

    现在我们定义Backbone模型,作为Java Bean的对应。Backbone模型Product使用和Java Bean相同的数据结构,因为它是我们希望在Java服务器上持久存储的数据。

    Backbone模型也实现了业务逻辑:getValueOfGoods方法通过将stockprice相乘计算所有产品的总值。每次stockprice的变动都会使重新计算。

    由于Backbone模型不使用任何Nashron语言扩展,我们可以在客户端(浏览器)和服务端(Java)安全地使用同一份代码。

    要记住我特意选择了十分简单的函数来演示我的意图。真实的业务逻辑应该会更复杂。

    首先,我们创建一个新的脚本,它仅仅由Nashron执行,所以我们这里可以安全地使用Nashron的扩展。

    这个脚本首先加载了相关的外部脚本Underscore 和 (Underscore是Backbone的必备条件),以及我们前面的ProductBackbone模型。

    函数calcute接受ProductJava Bean,将其所有属性绑定到新创建的BackboneProduct上,之后返回模型的所有属性给调用者。通过在Backbone模型上设置stock和属性,ValueOfGoods属性由于注册在模型initialize构造函数中的事件处理器,会自动计算出来。

    最后,我们在Java中调用calculate函数。

    我们创建了新的ProductJava Bean,并且将它传递到JavaScript函数中。结果触发了getValueOfGoods方法,所以我们可以从返回的对象中读取valueOfGoods属性的值。

    这篇文章中可运行的代码托管在Github上(请见)。请随意fork我的仓库,或者在上向我反馈。