PandaJS: Rhino + MongoDB + Server-side JQuery Template

[size=large][align=center][b]PandaJS: Rhino + MongoDB + Server-side JQuery Template[/b][/align][/size]
  PandaJS 是基于 Rhino、MongoDB、Server-side jQuery Template 的 JS 编程工具包,目标是使用更一致的方式编写客户端和服务器端的 js 代码。它采用嵌入式的 Jetty 作为 Web Server,依赖于 Java 7。
  PandaJS 在服务器端的页面渲染也采用 JQuery Template 的语法,而数据库操作接口的语法与 Mongo Shell 上直接执行的原生语法非常接近。这使得我们可以在服务器端和客户端共用页面渲染代码,并且可以直接使用从前端传递过来的 JavaScript 对象与数据库进行交互。
  Google Code 上的项目地址:[url]http://code.google.com/p/pandajs/[/url]
  运行、调试、测试、部署:[url]http://xxing22657-yahoo-com-cn.iteye.com/blog/1151963[/url]

[size=medium][align=center][b]Code Sample[/b][/align][/size]
  【使用 MongoDB 进行数据管理】
dbo.users = function(){  
var users = panda.db.get("users");
return {
list: function() {
if (!users.count()) { init(); }
return users.list().$sort({ name: 1 });
},
add: function(user) {
users.insert(user);
return this.list();
},
update: function(user) {
var q = { name: user.name };
users.update(q, user, true, false);
return this.list();
},
remove: function(name) {
users.remove({ name: name });
return this.list();
}
};

// 初始化数据库的实现,略
function init() { ... }
}();

  见文章 [url]http://xxing22657-yahoo-com-cn.iteye.com/blog/1158359[/url]

  【使用 jQuery Template 语法进行服务器端页面渲染】
var views = {};  

views.index = function($, users) {
var content = $("#content-tmpl").tmpl(),
rows = $("#user-tmpl").tmpl(users);

$("#content").html(content);
$("#content tr:first").after(rows);
$("#error").hide();
};

  见文章 [url]http://xxing22657-yahoo-com-cn.iteye.com/blog/1158359[/url]

  【服务器端与客户端共用代码】

  可以共用的代码包括渲染代码、数据校验代码等,这里以共用渲染代码为例
  (共用前面提到的 views.index(...))。

  服务器端代码:
page.index = function(params, req, res) {  
return panda.render("index", function($){
views.index($, dbo.users.list());
});
};

  客户端代码:
$(function(){
bind();

// 其他代码,略

// 每次修改数据时重新渲染页面、绑定事件
function show(users) {
views.index($, users);
bind();
}
});

  见文章
  [url]http://xxing22657-yahoo-com-cn.iteye.com/blog/1158359[/url]
  [url]http://xxing22657-yahoo-com-cn.iteye.com/blog/1159712[/url]

  【客户端与服务器端之间的数据通信】

  客户器端代码:
$(function(){  
var request = {
action: "hello.say",
params: { name: "Panda" }
};

panda.post(request, function(data) {
$("#message").html(data);
});
});

  服务器端代码:
api.hello = {  
say: function(params) {
return "Hello, " + params.name + "!";
}
};

  见文章 [url]http://xxing22657-yahoo-com-cn.iteye.com/blog/1153849[/url]

[size=medium][align=center][b]编写 Java 和 JavaScript 扩展[/b][/align][/size]
  【Java扩展】
  直接在工程中创建 java 文件,或者将独立的 Java 工程导出的 jar 文件添加到 Build Path 中;
  然后可以用 importPackage(...) 或者 JavaImporter 导入 java package,
  可以参考 scripts/lib/panda 的写法。

  【JavaScript 扩展】
  在 scripts/lib 下创建新的文件夹。
  启动应用时,文件夹名称将作为一个对象被创建,并执行文件夹中的所有 js 文件。
  可以参考 scripts/lib/panda 的写法。

[size=medium][align=center][b]其他[/b][/align][/size]
  使用 Proxy 对象拦截方法调用(日志、权限控制、数据校验):
  [url]http://xxing22657-yahoo-com-cn.iteye.com/blog/1159366[/url]
  [url]http://xxing22657-yahoo-com-cn.iteye.com/blog/1159712[/url]

  HTML5 与 Flash 文件上传:见文章 [url]http://xxing22657-yahoo-com-cn.iteye.com/blog/1154752[/url]
  Spket 智能感知:见文章 [url]http://xxing22657-yahoo-com-cn.iteye.com/blog/1155510[/url]

  此外,PandaJS 支持热部署,修改 scripts/app 、 scripts/lib 、 webapp/js/both 下的 js 文件时不需要重启应用。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值