1 defineClass('JPViewController', {
 2   handleBtn: function(sender) {
 3     var tableViewCtrl = JPTableViewController.alloc().init()
 4     self.navigationController().pushViewController_animated(tableViewCtrl, YES)
 5   }
 6 })
 7 
 8 defineClass('JPTableViewController : UITableViewController <UIAlertViewDelegate>', ['data'], {
 9   dataSource: function() {
10     var data = self.data();
11     if (data) return data;
12     var data = [];
13     for (var i = 0; i < 20; i ++) {
14       data.push("cell from js " + i);
15     }
16     self.setData(data)
17     return data;
18   },
19   numberOfSectionsInTableView: function(tableView) {
20     return 1;
21   },
22   tableView_numberOfRowsInSection: function(tableView, section) {
23     return self.dataSource().length;
24   },
25   tableView_cellForRowAtIndexPath: function(tableView, indexPath) {
26     var cell = tableView.dequeueReusableCellWithIdentifier("cell") 
27     if (!cell) {
28       cell = require('UITableViewCell').alloc().initWithStyle_reuseIdentifier(0, "cell")
29     }
30     cell.textLabel().setText(self.dataSource()[indexPath.row()])
31     return cell
32   },
33   tableView_heightForRowAtIndexPath: function(tableView, indexPath) {
34     return 60
35   },
36   tableView_didSelectRowAtIndexPath: function(tableView, indexPath) {
37      var alertView = require('UIAlertView').alloc().initWithTitle_message_delegate_cancelButtonTitle_otherButtonTitles("Alert",self.dataSource()[indexPath.row()], self, "OK",  null);
38      alertView.show()
39   },
40   alertView_willDismissWithButtonIndex: function(alertView, idx) {
41     console.log('click btn ' + alertView.buttonTitleAtIndex(idx).toJS())
42   }
43 })
;(function(){try{\ndefineClass('JPViewController', {\n  handleBtn: function(sender) {\n    var tableViewCtrl = JPTableViewController.__c(\"alloc\")().__c(\"init\")()\n    self.__c(\"navigationController\")().__c(\"pushViewController_animated\")(tableViewCtrl, YES)\n  }\n})\n\ndefineClass('JPTableViewController : UITableViewController <UIAlertViewDelegate>', ['data'], {\n  dataSource: function() {\n    var data = self.__c(\"data\")();\n    if (data) return data;\n    var data = [];\n    for (var i = 0; i < 20; i ++) {\n      data.__c(\"push\")(\"cell from js \" + i);\n    }\n    self.__c(\"setData\")(data)\n    return data;\n  },\n  numberOfSectionsInTableView: function(tableView) {\n    return 1;\n  },\n  tableView_numberOfRowsInSection: function(tableView, section) {\n    return self.__c(\"dataSource\")().length;\n  },\n  tableView_cellForRowAtIndexPath: function(tableView, indexPath) {\n    var cell = tableView.__c(\"dequeueReusableCellWithIdentifier\")(\"cell\") \n    if (!cell) {\n      cell = require('UITableViewCell').__c(\"alloc\")().__c(\"initWithStyle"