1+ load ( 'http://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.6.0/underscore-min.js' ) ;
2+ load ( 'http://cdnjs.cloudflare.com/ajax/libs/backbone.js/1.1.2/backbone-min.js' ) ;
3+
4+
5+ // simple backbone model:
6+ // valueOfGoods will automatically be calculated when stock or price changes
7+ var Product = Backbone . Model . extend ( {
8+ defaults : {
9+ stock : 0 ,
10+ price : 0.0 ,
11+ name :'' ,
12+ valueOfGoods : 0.0
13+ } ,
14+
15+ initialize : function ( ) {
16+ this . on ( 'change:stock change:price' , function ( ) {
17+ var stock = this . get ( 'stock' ) ;
18+ var price = this . get ( 'price' ) ;
19+ var valueOfGoods = this . getValueOfGoods ( stock , price ) ;
20+ this . set ( 'valueOfGoods' , valueOfGoods ) ;
21+ } ) ;
22+ } ,
23+
24+ getValueOfGoods : function ( stock , price ) {
25+ return stock * price ;
26+ }
27+ } ) ;
28+
29+ var product = new Product ( ) ;
30+ product . set ( 'name' , 'Pencil' ) ;
31+ product . set ( 'stock' , 1000 ) ;
32+ product . set ( 'price' , 3.99 ) ;
33+
34+
35+ // pass backbone model to java method
36+ var Nashorn6 = Java . type ( 'com.winterbe.java8.Nashorn6' ) ;
37+ Nashorn6 . getProduct ( product . attributes ) ;
38+
39+
40+ // bind java object to backbone model and pass result back to java
41+ var calculate = function ( javaProduct ) {
42+ var model = new Product ( ) ;
43+ model . set ( 'name' , javaProduct . name ) ;
44+ model . set ( 'price' , javaProduct . price ) ;
45+ model . set ( 'stock' , javaProduct . stock ) ;
46+ return model . attributes ;
47+ } ;
0 commit comments