`
裴小星
  • 浏览: 264952 次
  • 性别: Icon_minigender_1
  • 来自: 北京
博客专栏
8ccf5db2-0d60-335f-a337-3c30d2feabdb
Java NIO翻译
浏览量:27803
F3e939f0-dc16-3d6e-8c0b-3315c810fb91
PureJS开发过程详解
浏览量:73986
07a6d496-dc19-3c71-92cf-92edb5203cef
MongoDB Java ...
浏览量:62890
社区版块
存档分类
最新评论

PandaJS 使用说明(1.10):小结

阅读更多
PandaJS 使用说明(1.10):小结

  PandaJS 是基于 Rhino、MongoDB、Server-side jQuery Template 的 JS 编程工具包,目标是使用更一致的方式编写客户端和服务器端的 js 代码。它采用嵌入式的 Jetty 作为 Web Server,依赖于 Java 7。
  PandaJS 在服务器端的页面渲染也采用 JQuery Template 的语法,而数据库操作接口的语法与 Mongo Shell 上直接执行的原生语法非常接近。这使得我们可以在服务器端和客户端共用页面渲染代码,并且可以直接使用从前端传递过来的 JavaScript 对象与数据库进行交互。
  Google Code 上的项目地址: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() {  
        panda.db.eval(function(){  
            var users = db.users;  
            users.drop();  
            users.ensureIndex({ name: 1 }, { unique: true }); 
  
            users.insert({ name: "user1", desc: "desc1" });  
            users.insert({ name: "user2", desc: "desc2" });  
            users.insert({ name: "user3", desc: "desc3" });  
        });  
    }  
}();

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

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

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

  【使用 Proxy 对象拦截方法调用(日志、权限控制、数据校验)】
(function() {  
    var log = panda.log("proxy.security");  
  
    proxy.security = { priority: 80 };  
  
    // 对 page.* 的调用进行权限控制  
    proxy.security.page = {  
        priority: 100,  
        expr: /^page./,  
        func: function(name, method, args) {  
            // 获取方法的第二个参数,即 req  
            var req = args[1];  
  
            // 读取 session 中的role。返回值是 java.lang.String  
            // 加上空字符串转为 JavaScript 中的 String  
            var role = req.session.getAttribute("user.role") + "";  
  
            // 如果角色是 "admin",则显示相应页面  
            // 否则,显示登录页面  
            if (role === "admin") {  
                return this[method].apply(this, args);  
            } else {  
                log.info("Redirect to login page.");  
                return panda.render("login");  
            }  
        }  
    }  
  
    // 利用类似的方法对 api.* 的调用进行权限控制,略  
    proxy.security.api = { ... }  
}()); 

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

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

  可以共用的代码包括渲染代码、数据校验代码等,这里以共用渲染代码为例
  (共用前面提到的 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 文件添加到 Build Path 中;
  然后可以用 importPackage(...) 或者 JavaImporter 导入 java package,
  可以参考 scripts/lib/panda 的写法。

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

其他

  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 文件时不需要重启应用。
7
4
分享到:
评论
3 楼 witcheryne 2011-09-01  
裴小星 写道
witcheryne 写道
强力!!
引用
  
【Java扩展】
  直接在工程中创建 java 文件,或者将独立的 Java 工程导出的 jar 文件添加到 Build Path 中;
  然后可以用 importPackage(...) 或者 JavaImporter 导入 java package,
  可以参考 scripts/lib/pure 的写法。


这个意思是Javascript中能调用java代码?


可以,这是 Rhino 的功能:
http://www.mozilla.org/rhino/ScriptingJava.html


噢噢, 回头看看...
node.js  要是能够调用java, 那功能强大了...
2 楼 裴小星 2011-09-01  
witcheryne 写道
强力!!
引用
  
【Java扩展】
  直接在工程中创建 java 文件,或者将独立的 Java 工程导出的 jar 文件添加到 Build Path 中;
  然后可以用 importPackage(...) 或者 JavaImporter 导入 java package,
  可以参考 scripts/lib/pure 的写法。


这个意思是Javascript中能调用java代码?


可以,这是 Rhino 的功能:
http://www.mozilla.org/rhino/ScriptingJava.html
1 楼 witcheryne 2011-09-01  
强力!!
引用
  
【Java扩展】
  直接在工程中创建 java 文件,或者将独立的 Java 工程导出的 jar 文件添加到 Build Path 中;
  然后可以用 importPackage(...) 或者 JavaImporter 导入 java package,
  可以参考 scripts/lib/pure 的写法。


这个意思是Javascript中能调用java代码?

相关推荐

    OPC Core Components 3.00 (101.2)

    OPC Common 1.10 : Proxy/Stub DLL; .NET Wrapper; IDL/Headers; Project Source Code OPC Server Enumerator 1.10 : DCOM EXE Server; IDL/Headers; Project Source Code OPC Data Access 2.05/3.00 : Proxy/Stub ...

    Kvaser主要函数介绍

    http://192.168.1.10:8080/deviceStatus ``` 对于此API适用以下规则: - 所有常量必须用其数值指定,例如`canBITRATE_1M`应给定为-1。 - 所有数字均为十进制。 - 所有调用都可以采用一个可选整数参数`ident`,该...

    go1.10:golang 1.10原始码,https

    除非另有说明,否则Go源文件将根据LICENSE文件中的BSD样式许可进行分发。 下载并安装 二元分布 官方二进制发行版可从。 下载二进制版本后,请访问或在网络浏览器中加载doc / install.html以获取安装说明。 从源...

    commons-configuration-1.10-API文档-中文版.zip

    赠送jar包:commons-configuration-1.10.jar 赠送原API文档:commons-configuration-1.10-javadoc.jar 赠送源代码:commons-...人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。

    k8s 二进制安装 etcd 3.5.1

    --initial-cluster node1=http://192.168.1.10:2380,node2=http://192.168.1.11:2380,node3=http://192.168.1.12:2380 ``` 3. **添加新节点**:如果需要扩大集群规模,可以通过`etcdctl member add`命令添加新...

    2022最新版:ROAM V1.10主题:旅行和旅游WordPress主题.rar

    ROAM V1.10是2022年更新的一款专为旅行和旅游行业设计的WordPress主题,它提供了丰富的功能和优化的用户体验,旨在帮助旅游公司、旅行社或个人旅游博主更好地展示他们的服务、行程和故事。这款主题不仅具有现代感的...

    Xsocks 反弹代理s5

    反弹式内网代理软件,Usage : xsocks [-l port] [-t] [-p1 port] [-p2 port] [-s ip:port] [-r ip:port] [-u username] [-p password] Options : -l Set forward... xsocks -s 192.168.1.11:8085 -r 192.168.1.10:8086

    Bibtex to bibitem converter 1.10 :从 Google 学者或其他人引用的 BibTeX 转换 bibitem 的稳定版本。-matlab开发

    此代码是为寻求编辑而提供的。 如果您想使用该服务,您可以使用完整的软件,如下所示: ... * 功能使用说明: 1. 将 BibTeX 保存在文本文件中并复制路径。 (即 C:\Users\...\Desktop\BibTeX.txt)

    commons-codec-1.10-API文档-中文版.zip

    赠送jar包:commons-codec-1.10.jar; 赠送原API文档:commons-codec-1.10-javadoc.jar; 赠送源代码:commons-codec-1.10-sources.jar...人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。

    Try-Django-1.10:尝试Django 1.10通过创建URL缩短服务对Django 1.10进行了介绍。 本系列涵盖各种Django基础知识以及Django 1.10特定材料。 由Team CFE @ http:joincfe.com创建

    试用Django 1.10 尝试Django 1.10通过创建URL缩短服务来介绍Django 1.10。 本系列涵盖各种Django基础知识以及Django 1.10特定材料。 由Team CFE @ 创建。 教程视频可在我们的并且在《没有广告。 订阅我们的感谢收看...

    ZEC 拼图游戏 v1.10(C++)

    C++ Builder写的ZEC拼图游戏,南国椰树沙滩风情。...版本v1.10:修改了About关于对话框,增加了版本信息,可以复制网址(我的博客)链接文字,取消了上一版本的点击链接直接打开网址功能;小的细节修改。

    byte-buddy-1.10.22-API文档-中文版.zip

    赠送jar包:byte-buddy-1.10.22.jar; 赠送原API文档:byte-buddy-1.10.22-javadoc.jar; 赠送源代码:byte-buddy-1.10.22-sources.jar;...人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。

    PngBuild BATE1.10(素材生成器)

    《PngBuild BATE1.10:2D与3D素材生成利器》 在游戏开发和图形设计领域,高效地处理图像资源是至关重要的。PngBuild BATE1.10是一个专为XNA Framework设计的素材生成工具,尤其在处理2.0到4.0版本的XNB纹理文件时...

    OllyDBG 1.10

    《深入解析OllyDBG 1.10:逆向工程的神器》 OllyDBG 1.10,作为一款著名的动态反汇编调试工具,是逆向工程师们的得力助手。这款软件以其强大的功能、直观的用户界面以及对Windows平台下的x86汇编代码的深度分析而...

    byte-buddy-agent-1.10.22-API文档-中文版.zip

    赠送jar包:byte-buddy-agent-1.10.22.jar; 赠送原API文档:byte-buddy-agent-1.10.22-javadoc.jar; 赠送源代码:byte-buddy-agent-...人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。

    pyvisa1.10使用手册

    PyVISA 1.10 是一个用于控制各种测量设备的 Python 包,无论设备的接口类型(如 GPIB、RS232、USB 或 Ethernet)。这个库简化了与仪器设备交互的过程,使得通过编程控制测量设备变得简单。在Windows、Linux 和 Mac ...

    Synergy_1.10.zip

    《Synergy 1.10:一套键盘,多台电脑的智能控制方案》 在现代的多设备工作环境中,能够高效地在不同设备之间切换和操作是提高生产力的关键。Synergy 1.10 正是一款针对这一需求设计的软件,它允许用户通过一个键盘...

    灰色菜单克星1.10

    《灰色菜单克星1.10:解锁灰色菜单,恢复功能正常使用详解》 在日常的计算机使用中,我们时常会遇到一些程序中的菜单项呈现灰色,无法点击的情况,这通常是由于软件权限限制、未安装必要组件或者软件设置不当导致的...

    commons-codec-1.10-API文档-中英对照版.zip

    赠送jar包:commons-codec-1.10.jar; 赠送原API文档:commons-codec-1.10-javadoc.jar;...人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。 双语对照,边学技术、边学英语。

    HDD Raw Copy Tool_1.10

    【标题】"HDD Raw Copy Tool 1.10" 是一款专为创建黑苹果(Black Apple)引导U盘设计的实用工具。它允许用户以原始数据复制的方式将硬盘内容克隆到USB闪存驱动器,以便在非苹果硬件上安装和运行Mac OS X或macOS操作...

Global site tag (gtag.js) - Google Analytics