首页 > 其他分享 >Ext JS 4:模型剖析

Ext JS 4:模型剖析

时间:2023-05-21 15:02:13浏览次数:80  
标签:name 模型 JS 剖析 Ext User id


       如果你在跟踪Ext JS动态,你可能已经知道,在Ext JS 4中有一个全新的数据包。新的数据包在Ext JS 3的基础上,增加了大良的新功能。近期我们在博客上介绍了新的数据包,今天我们将深度探讨新的Model类。

      几乎每一个Model类就代表了应用程序中持久化的数据类型。例如,在电子商务应用程序可能包含用户、产品、订单等模型,而每个模型包含一些字段以及允许应用操作这些数据的函数。例如,一个订单模型可以包含一个“shipToCustomer”的函数用来实现配送流程。

      Ext JS 3.x之前的版本有一个Record类,它与Model类非常类似。所不同的是,Record类虽然也包含字段和函数,但Model类功能更强大。今天,我们将介绍Model类的死个主要功能:字段、代理、关系和验证。

     

      字段

      每个模型都由一个或多个字段组成。简单来说,一个字段就是一个名字,如“id”、“email”和“phone”是用户模型的字段。它们可以有一个类型(int、float、string或auto),甚至可以有一个转换函数用来编辑它们的值。例如,用户的身高,我们可以通过一个函数将它从英寸转换为厘米。

      下面代码演示了如何建立一个只有3个字段的简单用户模型。在第一个字段中,我们将其类型设置为“int”,意味着它应该是一个整数。在第二个字段中,我们将不指定类型,这以为着它将使用“auto”作为默认类型。“auto”类型表示接受任何传递给它的数据。在第三个字段中,虽然我们也将它设置为“int”类型,但我们提供了一个转换函数用来将英寸值转换为厘米值。



Ext . regModel ( ' User ' ,   {


        fields :   [


                { name :   ' id ' ,   type :   ' int ' } ,


                ' name ' ,


                {


                        name :   ' height ' ,


                        type :   ' int ' ,


                        convert :   function ( inches )   {


                                return   Math . round ( inches   *   2 . 54 ) ;

10 

                        }

11 

                }

12 

        ]

13 

} ) ;


 

      现在我们可以很简单的创建一个用户实例来观察字段定义如何影响到他们的数据:


var   abe   =   new   User ( {


        id :   123 ,


        name :   ' Abe   Elias ' ,


        height :   76


} ) ;


 


console . log ( abe . get ( ' id ' ) ) ;   // logs   123   (a   JavaScript   Number   object)


console . log ( abe . get ( ' name ' ) ) ;   // logs   'Abe   Elias'   (A   JavaScript   String   object)


console . log ( abe . get ( ' height ' ) ) ;   // logs   193   (inches   converted   to   centimeters)


       使用模型的简单实例非常简单,但是,一个应用程序通常需要加载或保存大量数据,因此,我们需要使用到代理。

      代理

      在Ext JS 4中,代理可以从不同的数据源加载或保存数据。譬如,可以使用Ajax,也可以使用HTML5的localStorage,或保存在内存中的数据。在Ext JS 4中定义了一系列在默认情况下使用的代理,你也可以根据需要,轻松的创建自己的代理。让我们看看,如何在用户模型中建立代理:



Ext . regModel ( ' User ' ,   {


        fields :   [ ' id ' ,   ' name ' ,   ' email ' ] ,


 


        proxy :   {


                type :   ' rest ' ,


                url   :   ' / users ' ,


                reader :   ' json '


        }


} ) ;


      直接在模型中定义代理是Ext JS 4的新功能,这意味着我们可以不用象Ext JS 3那样,需要创建一个Store,就可以很轻松的加载或保存数据。

      在上面的代码中,用户模型使用了RestProxy代理,它将使用AJAX从服务器中加载或保存数据。它会根据提供的基本地址自动的构建RESTful地址(上面例子的是“/users”)。我们也可以创建一个使用JsonReader的代理,在用户模型实例中处理服务器响应和解码数据。在这种情况下,我们知道服务器将返回JSON数据,因此需要使用JsonReader。

      让我们来加载一个用户模型:



// GET   /users/123


User . load ( 123 ,   {


        success :   function ( user )   {


                console . log ( user . get ( ' name ' ) ) ;


        }


} ) ;


      上面的代码将从地址“/user/123”加载数据,这是根据我们将id传递给User.load函数构造出来的地址。接着,JsonReader将响应的数据解码到用户对象。服务器返回的数据格式如下(使用的是上面log实例的代码):



// response   from   GET   /users/123


{


        " id " :   123 ,


        " name " :   " Aaron   Conran " ,


        " email " :   " [email protected] "


}


 

      不要轻易满足,我们将介绍更高等级的数据关联。

     关系

      在一个应用中通常都会有多个模型,而且他们都不是单独存在的。在模型之间都会存在关联,例如,系统中的用户都会有订单,而每个订单又是由订单项组成。Ext JS 4为我们提供了简单而直观的API,从而使我们可以在客户端表现这些关系。让我们创建以下3个模型:


// each   User   hasMany   Orders


Ext . regModel ( ' User ' ,   {


        fields :   [ ' id ' ,   ' name ' ,   ' email ' ] ,


        proxy   :   {


                type :   ' rest ' ,


                url   :   ' / users ' ,


                reader :   ' json '


        } ,


 

10 

        hasMany :   ' Orders '

11 

} ) ;

12 

 

13 

// each   Order   belongsTo   a   User,   and   hasMany   OrderItems

14 

Ext . regModel ( ' Order ' ,   {

15 

        fields :   [ ' id ' ,   ' user_id ' ,   ' status ' ] ,

16 

        belongsTo :   ' User ' ,

17 

        hasMany :   ' OrderItems '

18 

} ) ;

19 

 

20 

// each   OrderItem   belongsTo   an   Order

21 

Ext . regModel ( ' OrderItem ' ,   {

22 

        fields :   [ ' id ' ,   ' order_id ' ,   ' name ' ,   ' description ' ,   ' price ' ,   ' quantity ' ] ,

23 

        belongsTo :   ' Order '

24 

} ) ;


 

      现在,应用程序已经知道相关模型及其关系,下面看看我们如何使用它们。现在我们扩展一下上面代理一节的例子,让我们服务器响应的数据格式如下:



{


        " id " :   123 ,


        " name " :   " Aaron   Conran " ,


        " email " :   " [email protected] " ,


        " orders " :   [


                {


                        " id " :   1 ,


                        " status " :   " shipped " ,


                        " orderItems " :   [

10 

                                {

11 

                                        " id " :   2 ,

12 

                                        " name " :   " Sencha   Touch " ,

13 

                                        " description " :   " The   first   HTML5   mobile   framework " ,

14 

                                        " price " :   0 ,

15 

                                        " quantity " :   1

16 

                                }

17 

                        ]

18 

                }

19 

        ]

20 

}


 

      当我们加载用户数据时,相关的订单和订单项数据会与它一起加载,这样就能使我们的代码实现互动:



User . load ( 123 ,   {


        success :   function ( user )   {


                console . log ( user . get ( ' name ' ) ) ;   // "Aaron   Conran"


                console . log ( user . orders ( ) . getCount ( ) ) ;   // "1"   --   there   is   only   1   order   in   the   response   above


 


                // we   can   iterate   over   the   orders   easily   using   the   Associations   API


                user . orders ( ) . each ( function ( order )   {


                        console . log ( order . get ( ' status ' ) ) ;   // "shipped"


 

10 

                        // we   can   even   iterate   over   each   Order's   OrderItems:

11 

                        order . orderItems ( ) . each ( function ( orderItem )   {

12 

                                console . log ( orderItem . get ( ' title ' ) ) ;   // "Sencha   Touch"

13 

                        } ) ;

14 

                } ) ;

15 

        }

16 

} ) ;


 

      关系API是Ext JS 4中最强大的功能之一。因为Sencha Touch的数据包和Ext JS 4是相同的,因为你可以下载Sencha Touch并查看与HasMany或 Belongs的相关API文档。

      验证

      今天我们要介绍的最后一个共嫩是验证。在Ext JS 3,只有在表单中才可以进行验证。但在上面的实例代码中,我们操纵的数据都不需要表单,因此我们需要在模型级别进行验证。幸运的是,Ext JS已经支持这一点,让我们来看看:



Ext . regModel ( ' User ' ,   {


        fields :   [ ' id ' ,   ' name ' ,   ' email ' ,   ' height ' ] ,


 


        validations :   [


                { type :   ' presence ' ,   field :   ' id ' } ,


                { type :   ' length ' ,   field :   ' name ' ,   min :   2 } ,


                { type :   ' format ' ,   field :   ' email ' ,   matcher :   / [ a - z ] @ [ a - z ] . com / }


        ]


} ) ;


      在上面代码中,我们在用户模型设置了3个简单的验证。首先,“id”字段被设置为必须是存在的;然后,“name”字段的长度至少需要2个字符;最后,我们使用正则表达式验证“emali”字段。

      我们可以通过这些验证确保模型的数据是正确。在下面代码,我们将创建一个没有“id”,用户名也不是有效数据的用户,并要求它进行验证:

 



var   ed   =   new   User ( {


        email :   " [email protected] "


} ) ;


 


var   validation   =   ed . validate ( ) ;


 


console . log ( validation . isValid ( ) ) ;   // false


 


// we   can   easily   output   or   manipulate   any   validation   errors

10 

validation . each ( function ( error )   {

11 

        console . log ( error . field   +   "   "   +   error . message ) ;

12 

} ) ;

13 

 

14 

// in   this   case,   the   output   looks   like   this:

15 

" id   must   be   present "

16 

" name   is   the   wrong   length "


      了解更多        

      我们们已经了解了新的模型类的四大基石:字段、代理、关系和验证。掌握好这4个概念可以让你使用Ext JS 4或Sencha Touch创建更好的应用程序。要了解更多数据包的信息,可以看看我们最近的博客文章或者阅读Sencha Touch的文档。

 

原文:http://www.sencha.com/blog/ext-js-4-anatomy-of-a-model/

标签:name,模型,JS,剖析,Ext,User,id
From: https://blog.51cto.com/dqhuang/6319489

相关文章

  • Asp.net MVC 3实例学习之ExtShop(六)——登录对话框
         登录对话框将使用jquery提供的对话框,所以不需要添加其它js文件。首先要为登录对话框添加一个表单模型。在Models目录下创建一个“AccountModels”类文件,然后添加一个Logon类,代码如下:1     public class LogOnModel2     {3      ......
  • 一步一步使用Ext JS MVC与Asp.Net MVC 3开发简单的CMS后台管理系统之用户管理(1)
    应用程序的基本框架已经搭建好了,现在要做的是完成一个个的功能模块。先从简单做起,完成用户管理模块,该模块主要功能是使用一个Grid显示用户信息,并使用RowEditing进行用户的编辑、添加操作。Grid的分页则在Grid顶部使用分页工具条实现,在工具条上还要添加3个按钮用来添加用户、删除用......
  • 一步一步使用Ext JS MVC与Asp.Net MVC 3开发简单的CMS后台管理系统之用户管理(4)
    现在来完成删除功能。目前的Grid,一次只能选择一行,也就是说,一次只能删除一行,不太方便,因而要设置成使用复选框选择,并允许多选的。在用户视图脚本文件中,添加以下配置项实现这个:"checkboxmodel",false,mode:"MULTI" 打开页面浏览,会看到如图29所示的效果,已经可以在最左边通过复选框进......
  • 一步一步使用Ext JS MVC与Asp.Net MVC 3开发简单的CMS后台管理系统之用户管理(3)
    昨天还有一个错误,CheckColumn的样式和图片没复制过来,造成最后一列的Checkbox显示不正确。在ExtJS包的examples\ux\css目录下打开CheckHeader.css文件,将文件里的全部样式定义复制到app.css中。然后修改将带背景图片的路径修改为“../images”。最后将image目录下的check.gif和unche......
  • 一步一步使用Ext JS MVC与Asp.Net MVC 3开发简单的CMS后台管理系统之用户管理(2)
    现在,创建视图,在Scripts\app\view目录下先创建目录Users,然后在该目录下创建View.js。要使用Grid显示用户信息,因而要从Grid面板派生出视图。定义的时候要注意视图的类名。还有就是一定要定义别名,因为在控制器中是使用widget方法创建的视图实例。如果不想定义别名,那就要修改创建实例的......
  • 一步一步使用Ext JS MVC与Asp.Net MVC 3开发简单的CMS后台管理系统之登录窗口调试
         现在可以对登录窗口进行调试了。     打开系统的首页页面文件,Views\Home目录下的Index.cshtml文件。要动态加载登录窗口,需要先设置好加载路径,因而在onReady函数上加入以下代码:Ext.Loader.setConfig({true,paths:{'Ext.ux':'scripts/extjs/ux'......
  • 一步一步使用Ext JS MVC与Asp.Net MVC 3开发简单的CMS后台管理系统之创建Viewport(1)
    忙活了那么久,终于进入正题,ExtJSMVC开发。开始前,先说说4.1.1的一点点变化。在4.1的时候,要先创建一个扩展于Ext.app.Application的类,然后用create创建它的实例来开始应用程序的。而在4.1.1,则可直接调用application方法开始执行应用程序,简化了。调用application方法,其参数是一个配置......
  • 【译】ExtJS 4.1会带来什么
    原文:http://www.sencha.com/blog/whats-new-in-ext-js-4-1/渲染和布局。虽然我们的大多数时间一直致力于这项努力,但也有很多其他方法的进展可以分享。这些改进当中,主要的改进包括Grid、BorderLayout和海王星主题预览这些内容。     性能要成功地和永久地提高性能,测量已成为......
  • Do not forget to use Gzip for Express.js
     http://inspiredjw.com/do-not-forget-to-use-gzip-for-express/ Whenagzipcompatiblebrowserrequeststoawebserver,webservercancompresstheresponsetothebrowserbackandthebrowsercandecompresstheresponseandfinallythebrowsergettheori......
  • 把一个nodejs程序做成传统linux服务
     1:http://howtonode.org/deploying-node-upstart-monit  (  DeployingNode.jsWithUpstartandMonit)  2: https://www.exratione.com/2013/02/nodejs-and-forever-as-a-service-simple-upstart-and-init-scripts-for-ubuntu/    ( Node.jsandFor......