投放本站广告请联系:
extjscn#126.com
NodeJS 和 ExtJS
最近在看一些extjs和nodejs的东西,就试着将其结合着使用下。
1.新建express项目
首先我们新建一个express的项目,可以参照Web Development With Express。
express -e extjs-demo cd extjs-demo sudo npm install
增加数据库支持
sudo npm install mysql
连接数据库
var mysql = require('mysql'); var connection = mysql.createConnection({ host : 'localhost', port : 3306, database : 'blog', user : 'root', password : 'yourpassword' }); connection.connect(); module.exports = connection;
var mysql = require('./db'); Article.get = function get(query, callback){ var sql = 'SELECT * FROM `articles`' + (query ? (' WHERE ' + query) : '') mysql.query(sql, function(err, rows, fields) { if(err){ callback(err); } callback(err, rows); }); };
这里只稍微提下,具体可参见extjs-demo。
2.引入ExtJS
我们可以从ExtJS官网下载开发包,我这只取了其中的几个文件: * resources/ ExtJS所有的css定义和主题都在里面 * ext-all.js extjs的核心组件 * ext-lang-zh_CN.js ExtJS的中文化部件(选用)
修改我们的主页,加载ExtJS
<head> <link rel="stylesheet" type="text/css" href="/javascripts/extjs/resources/css/ext-all.css" /> <script type="text/javascript" src="/javascripts/extjs/ext-all.js"></script> <script type="text/javascript" src="/javascripts/extjs/ext-lang-zh_CN.js"></script> <script> Ext.Loader.setConfig({ enabled: true }); </script> <script type="text/javascript" src="/javascripts/app.js"> </script> </head>
Ext.application({ name: "demo", appFolder: "/javascripts/app", launch: function () { Ext.create('Ext.container.Viewport', { layout: 'fit', items: [{ xtype: 'panel', title: 'Demo for Extjs', html: 'you can see demo here' }] }); } });
这样启动之后就能看到extjs的界面了,当然加载的extjs可能有些多,如果有经验的同学可以指点下,还有哪些东西也可以将其去掉(刚接触,要是犯了比较白的错误,希望能指出,也好学习下,哈哈)。
3.ExtJS的MVC
参照ExtJS官方的说明,文件结构如下定义
--app --controller --model --store --view
加入controller和view
Ext.application({ name: "demo", appFolder: "/javascripts/app", controllers: ['Articles'], //This is somewhat different with the previous launch: function () { Ext.create('Ext.container.Viewport', { layout: 'fit', items: [{ xtype: 'panel', title: 'Demo for Extjs', items: [{ xtype: 'articleseditor' //This is somewhat different with the previous }] }] }); } });
这里通过controllers: [‘Articles’]调用对应的controller
Ext.define("Demo.controller.Articles", { extend: 'Ext.app.Controller', views: ['Articles'], //这里再取调用view init: function () { this.control({ 'articleseditor': { render: this.onEditorRender } }); }, onEditorRender: function () { console.log("articles editor was rendered"); } });
Ext.define('Demo.view.Articles', { extend: 'Ext.grid.Panel', id: "articles_editor", alias: 'widget.articleseditor', initComponent: function () { //hardcoded store with static data: this.store = { fields: ['title', 'year'], data: [{ title: 'The Matrix', year: '1999' }, { title: 'Star Wars: Return of the Jedi', year: '1983' }] }; this.callParent(arguments); } });
这里先放点假数据呈现下,至此你打开界面的时候就能看到相应的数据显示在页面上
数据放在页面上肯定是不合理的,一般model中定义数据的结构,store存取数据记录
在controller中新增
models: ['Articles'], stores: ['Articles'],
view中修改为
Ext.define('Demo.view.Articles', { extend: 'Ext.grid.Panel', id: "articles_editor", alias: 'widget.articleseditor', store: 'Articles', initComponent: function () { this.columns = [{ header: '作者', dataIndex: 'user', flex: 1 }, { header: '标题', dataIndex: 'title', flex: 1 }, { header: '内容', dataIndex: 'content', flex: 1 }, { header: '发生时间', dataIndex: 'happened_at', xtype : 'datecolumn', format : 'Y年m月d日', flex: 1 }]; this.callParent(arguments); } });
model中定义数据类型
Ext.define('Demo.model.Articles', { extend: 'Ext.data.Model', fields: [ { name: 'id', type: 'string' }, { name: 'user', type: 'string' }, { name: 'title', type: 'string' }, { name: 'content', type: 'string' }, { name: 'happened_at', type: 'string' }] });
store中存取数据记录
Ext.define('Demo.store.Articles', { extend: 'Ext.data.Store', model: 'Demo.model.Articles', data: [{ id: '1', user: 'tom', title: 'The Matrix', content: 'hello Tom', happened_at: '2013-6-1' }] });
当然至此为止我们还没进行数据交互的部分,那接下来我们就试试跟后台的交互
4.数据交互
在服务器段做下相应的json数据的准备
var Article = require('../models/article.js'); module.exports = function (app) { app.get('/articles', function(req, res) { Article.get(null, function(err, articles){ if(err){ articles = []; } res.contentType('json'); res.json({success: true, articles: articles}); }); }); }
通过proxy从服务器端的”/articles”中获取json数据
这样就能在网页上显示数据库中的数据.
这里的代码可以参考https://github.com/caok/extjs-demo
参考:
http://docs.sencha.com/extjs/4.1.3/#!/guide/editable_grid
http://docs.sencha.com/extjs/4.1.3/#!/guide/editable_grid_pt2
作者: Caok
原文: http://caok1231.com/blog/2013/06/18/nodejs-and-extjs/
- 要发表评论,请先登录