PandaJS: Rhino + MongoDB + Server-side JQuery Template

PandaJS: Rhino + MongoDB + Server-side JQuery Template

PandaJS是基于Rhino、MongoDB、Server-sidejQueryTemplate的JS编程工具包,目标是使用更一致的方式编写客户端和服务器端的js代码。它采用嵌入式的Jetty作为WebServer,依赖于Java7。

PandaJS在服务器端的页面渲染也采用JQueryTemplate的语法,而数据库操作接口的语法与MongoShell上直接执行的原生语法非常接近。这使得我们可以在服务器端和客户端共用页面渲染代码,并且可以直接使用从前端传递过来的JavaScript对象与数据库进行交互。

GoogleCode上的项目地址:http://code.google.com/p/pandajs/

运行、调试、测试、部署:http://xxing22657-yahoo-com-cn.iteye.com/blog/1151963

Code Sample

【使用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() { ... }  
}();

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

【使用jQueryTemplate语法进行服务器端页面渲染】

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();  
};

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

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

可以共用的代码包括渲染代码、数据校验代码等,这里以共用渲染代码为例

(共用前面提到的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();  
	}	
});

见文章

http://xxing22657-yahoo-com-cn.iteye.com/blog/1158359

http://xxing22657-yahoo-com-cn.iteye.com/blog/1159712

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

客户器端代码:

$(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 + "!";  
    }  
};

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

编写 Java 和 JavaScript 扩展

【Java扩展】

直接在工程中创建java文件,或者将独立的Java工程导出的jar文件添加到BuildPath中;

然后可以用importPackage(...)或者JavaImporter导入javapackage,

可以参考scripts/lib/panda的写法。

【JavaScript扩展】

在scripts/lib下创建新的文件夹。

启动应用时,文件夹名称将作为一个对象被创建,并执行文件夹中的所有js文件。

可以参考scripts/lib/panda的写法。

其他

使用Proxy对象拦截方法调用(日志、权限控制、数据校验):

http://xxing22657-yahoo-com-cn.iteye.com/blog/1159366

http://xxing22657-yahoo-com-cn.iteye.com/blog/1159712

HTML5与Flash文件上传:见文章http://xxing22657-yahoo-com-cn.iteye.com/blog/1154752

Spket智能感知:见文章http://xxing22657-yahoo-com-cn.iteye.com/blog/1155510

此外,PandaJS支持热部署,修改scripts/app、scripts/lib、webapp/js/both下的js文件时不需要重启应用。

相关推荐