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 文件时不需要重启应用。
分享到:
相关推荐
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 ...
http://192.168.1.10:8080/deviceStatus ``` 对于此API适用以下规则: - 所有常量必须用其数值指定,例如`canBITRATE_1M`应给定为-1。 - 所有数字均为十进制。 - 所有调用都可以采用一个可选整数参数`ident`,该...
除非另有说明,否则Go源文件将根据LICENSE文件中的BSD样式许可进行分发。 下载并安装 二元分布 官方二进制发行版可从。 下载二进制版本后,请访问或在网络浏览器中加载doc / install.html以获取安装说明。 从源...
赠送jar包:commons-configuration-1.10.jar 赠送原API文档:commons-configuration-1.10-javadoc.jar 赠送源代码:commons-...人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。
--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`命令添加新...
ROAM V1.10是2022年更新的一款专为旅行和旅游行业设计的WordPress主题,它提供了丰富的功能和优化的用户体验,旨在帮助旅游公司、旅行社或个人旅游博主更好地展示他们的服务、行程和故事。这款主题不仅具有现代感的...
反弹式内网代理软件,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
此代码是为寻求编辑而提供的。 如果您想使用该服务,您可以使用完整的软件,如下所示: ... * 功能使用说明: 1. 将 BibTeX 保存在文本文件中并复制路径。 (即 C:\Users\...\Desktop\BibTeX.txt)
赠送jar包:commons-codec-1.10.jar; 赠送原API文档:commons-codec-1.10-javadoc.jar; 赠送源代码:commons-codec-1.10-sources.jar...人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。
试用Django 1.10 尝试Django 1.10通过创建URL缩短服务来介绍Django 1.10。 本系列涵盖各种Django基础知识以及Django 1.10特定材料。 由Team CFE @ 创建。 教程视频可在我们的并且在《没有广告。 订阅我们的感谢收看...
C++ Builder写的ZEC拼图游戏,南国椰树沙滩风情。...版本v1.10:修改了About关于对话框,增加了版本信息,可以复制网址(我的博客)链接文字,取消了上一版本的点击链接直接打开网址功能;小的细节修改。
赠送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:2D与3D素材生成利器》 在游戏开发和图形设计领域,高效地处理图像资源是至关重要的。PngBuild BATE1.10是一个专为XNA Framework设计的素材生成工具,尤其在处理2.0到4.0版本的XNB纹理文件时...
《深入解析OllyDBG 1.10:逆向工程的神器》 OllyDBG 1.10,作为一款著名的动态反汇编调试工具,是逆向工程师们的得力助手。这款软件以其强大的功能、直观的用户界面以及对Windows平台下的x86汇编代码的深度分析而...
赠送jar包:byte-buddy-agent-1.10.22.jar; 赠送原API文档:byte-buddy-agent-1.10.22-javadoc.jar; 赠送源代码:byte-buddy-agent-...人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。
PyVISA 1.10 是一个用于控制各种测量设备的 Python 包,无论设备的接口类型(如 GPIB、RS232、USB 或 Ethernet)。这个库简化了与仪器设备交互的过程,使得通过编程控制测量设备变得简单。在Windows、Linux 和 Mac ...
《Synergy 1.10:一套键盘,多台电脑的智能控制方案》 在现代的多设备工作环境中,能够高效地在不同设备之间切换和操作是提高生产力的关键。Synergy 1.10 正是一款针对这一需求设计的软件,它允许用户通过一个键盘...
【标题】"HDD Raw Copy Tool 1.10" 是一款专为创建黑苹果(Black Apple)引导U盘设计的实用工具。它允许用户以原始数据复制的方式将硬盘内容克隆到USB闪存驱动器,以便在非苹果硬件上安装和运行Mac OS X或macOS操作...
《灰色菜单克星1.10:解锁灰色菜单,恢复功能正常使用详解》 在日常的计算机使用中,我们时常会遇到一些程序中的菜单项呈现灰色,无法点击的情况,这通常是由于软件权限限制、未安装必要组件或者软件设置不当导致的...
赠送jar包:commons-codec-1.10.jar; 赠送原API文档:commons-codec-1.10-javadoc.jar;...人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。 双语对照,边学技术、边学英语。