extjs5(MVVM特性

本文介绍ExtJS 5中的MVVM架构原理,通过实例演示如何利用MVVM实现视图与模型间的解耦及数据绑定,包括控制器与视图交互的方法。

jfok的专栏

147
原创
0
转载
0
译文
768
评论
548944
访问

2014 六月
30

跟我一起学extjs5(04--MVVM特性的简单说明)

 


跟我一起学extjs5(04--MVVM特性的简单说明)


        下面我们来看一下自动生成的代码中的MVVM架构的关系。Main是一个可视的控件,MainController是这个控件的控制类,MainModel是这个控件的模型类。



        在上面的图片中,左边是Main.js中的代码,右边是MainController.js 和 MainModel.js中的代码,可以看到MVVM中的事件绑定和属性值绑定都用到了。上图中红色的部分标注了一个按钮“Button”的handler(即click)事件绑定到MainController.js中的函数“OnClickButton”之上。蓝色部分表示将panel的title属性,绑定到了MainModel的属性data的name值上,如果你要修改该Panel的值,则只要修改MainModel中的data.name就可以。
        下面我们来看看网页里面的具体展示:



        下面做一个最简单的修改,将panel的title值改为“修改后的title”。修改MainController.js,加入一条语句
[javascript]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. Ext.define('app.view.main.MainController', {  
  2.             extend : 'Ext.app.ViewController',  
  3.   
  4.             requires : ['Ext.MessageBox'],  
  5.   
  6.             alias : 'controller.main',  
  7.   
  8.             onClickButton : function() {  
  9.                 Ext.Msg.confirm('Confirm''Are you sure?''onConfirm'this);  
  10.             },  
  11.   
  12.             onConfirm : function(choice) {  
  13.                 if (choice === 'yes') {  
  14.                     //加入下面这一条语句  
  15.                     this.getView().getViewModel().set('name' , "修改后的title");  
  16.                 }  
  17.             }  
  18.         });  

加入了一条语句

[javascript]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. this.getView().getViewModel().set('name' , "修改后的title");  
这条语句的信息量也很大,分别来说明一下:

  • this表示的是当前的类,也就是MainController的实例。
  • this.getView() 表示当前控制器控制下的View类实例。
  • this.getView().getViewModel()表示该view实例绑定的Model。
  • set('name','修改后的title'),将Model的值name修改,修改后panel的title会自动的进行更新。

执行后的结果如下:
 
        我们对程序的第一处修改得以正确执行。
        对于一个要学习好extjs的人来说,官方的例子和api是必不可少的工具。比如上面的一条语句中,我想得到当前控制器下的View,我也是去api上面的methods中找相应的函数,才能确定到底有没有和函数名称是什么。

 

 
 
xiongbinquan

dearbear2013

很不错的mvvm例子。赞一个!
2015-11-18 01:22
gilper

gilper

请问app目录可以自定义吗
2015-02-10 16:01
YuqiSun

YuqiSun

楼主,我想问一下,虽然cmd生成的有一个store文件夹,但是我看到网上很多store都是直接定义在viewmodel里,是不是只有多个view用到同一个store的时候才会在store文件夹理定义store?

http://www.sencha.com/forum/showthread.php?291063-MVVM-Remote-store-and-ViewModel-binding-to-GridPanel
2014-11-11 16:17
jfok

蒋锋

回复YuqiSun:各人有各人的编程风格,有些人喜欢一个类一个文件,但是也可以把store放在grid里面定义,建立一个类一个文件,虽然文件多,但是管理起来比较直观,还可以继承使用。
2014-11-11 21:49
kenny_2000

kenny_2000

楼主,我按照你的步骤做的,为什么我的中文字符都是乱码?必须修改浏览器的编码方式为简体才行
2014-11-10 19:00
okooo00

粗手摸大米

很好理解,一边学,一边做笔记,收益很大
2014-10-24 09:38
 
img

蒋锋

等级:

排名:第1972名

博客专栏
文章分类
文章存档
阅读排行
评论排行
推荐文章
最新评论
img
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值