投放本站广告请联系:
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/
- 要发表评论,请先登录

