7.2 Models -- Defining Models

一、概述

1. 模型是一个类,它定义了你呈现给用户的数据的属性和行为。用户希望如果他们离开你的应用程序,并返回后(或如果他们刷新页面)看到的任何东西应该被一个model代表。

2. 确保在ember.js后引入ember-data.js:

<script type="text/javascript" src="ember.js"></script>
<script type="text/javascript" src="ember-data.js"></script>

3. 对应用程序中的每个模型来说,创建一个DS.Model的子类:

app/models/person.js

export default DS.Model.extend();

4. 在你定义了一个model类之后,你可以开始为这个类型查找和创建records。当与store交互时,你需要使用model name来指定一个record的type。例如,store的find()方法期望有一个字符串作为它的第一个参数,告诉它查找什么类型的record:

store.findRecord(‘person‘, 1);

5. 下面的表格展示了模型的名字如何映射模型文件的路径:

Model Name Model Class
photo app/models/photo.js
admin-user-profile app/models/admin-user-profile.js

二、Defining attributes

1. 你可以通过使用DS.attr来指定一个modle有哪些属性。app/models/person.js

export default DS.Model.extend({
  firstName: DS.attr(),
  lastName: DS.attr(),
  birthday: DS.attr()
});

2. 当把一个从服务器返回的JSON转换为一个record,在它被修改后当序列化一个record保存到服务器时属性被使用。

3. 你也可以使用属性像其他属性一样,包括作为计算属性的一部分。往往,你会希望定义一个计算属性,它结合或者转换原始属性。

app/models/person.js

export default DS.Model.extend({
  firstName: DS.attr(),
  lastName: DS.attr(),

  fullName: Ember.computed(‘firstName‘, ‘lastName‘, function() {
    return this.get(‘firstName‘) + ‘ ‘ + this.get(‘lastName‘);
  })
});

4. 如果你不指定属性的类型,它将会是服务器提供的任何类型。你可以确定一个属性通常通过type或者attr被强制为特定的类型:

app/models/person.js

export default DS.Model.extend({
  birthday: DS.attr(‘date‘)
});

5. 默认的adapter提供string, number, boolean和date属性类型。自定义的adapters可能提供其他的属性类型,并且新类型可以被注册为变换式。请查看documentation section on the REST Adapter

6. 请注意Ember Data根据ISO 8601序列化和反序列化日期。例如:2014-05-27T12:54:01

8. Options

DS.attr用一个可选择的hash作为第二个参数:

(1) defaultValue: 如果没有提供的话,传递一个字符串或者一个被调用的function来设置为属性的默认值。

(2) example:

app/models/user.js

export default DS.Model.extend({
      username: DS.attr(‘string‘),
      email: DS.attr(‘string‘),
      verified: DS.attr(‘boolean‘, {defaultValue: false}),
      createdAt: DS.attr(‘string‘, {
          defaultValue() { return new Date(); }
      })
  });

三、Defining Relationships

Ember Data包含几个内置的关系类型,帮助我们定义你的模型是如何相互联系的。

1. one-to-one

使用DS.belongsTo在两个模型间声明一对一关系:

app/models/user.js

export default DS.Model.extend({
  profile: DS.belongsTo(‘profile‘)
});

app/models/profile.js

export default DS.Model.extend({
  user: DS.belongsTo(‘user‘)
});

2. one-to-many

使用DS.belongsToDS.hasMany结合来声明两个模型之间的一对多关系:

app/models/post.js

export default DS.Model.extend({
  comments: DS.hasMany(‘comment‘)
});

app/models/comment.js

export default DS.Model.extend({
  post: DS.belongsTo(‘post‘)
});

3. many-to-many

使用DS.hasMany来声明两个模型之间的多对多关系:

app/models/post.js

export default DS.Model.extend({
  tags: DS.hasMany(‘tag‘)
});

app/models/tag.js

export default DS.Model.extend({
  posts: DS.hasMany(‘post‘)
});

4. explicit inverses(显式倒转)

(1) Ember Data将尽其所能发现映射到另一个的关系。在上面的one-to-many代码中,例如,Ember Datak可以找出,改变comments的关系应该相反的更新post关系,因为post是唯一到该model的关系。

(2) 然而,有些时候对同一个类型你可能有许多个belongsTo/hasMany。你可以使用DS.hasManyinverse选项指定在相关的模型中哪一个是倒转的:

app/models/comment.js

export default DS.Model.extend({
  onePost: DS.belongsTo(‘post‘),
  twoPost: DS.belongsTo(‘post‘),
  redPost: DS.belongsTo(‘post‘),
  bluePost: DS.belongsTo(‘post‘)
});

app/models/post.js

export default DS.Model.extend({
  comments: DS.hasMany(‘comment‘, {
    inverse: ‘redPost‘
  })
});

你也可以指定在一个belgongsTo上指定一个倒转,它可以像你期望的那样工作。

5. reflexive relation(自关联关系)

当你想定义一个自关联关系,你必须明确定义另一方,并且设置相应的显示倒转,如果你不需要另一方,设置为null。

app/models/folder.js

export default DS.Model.extend({
  children: DS.hasMany(‘folder‘, { inverse: ‘parent‘ }),
  parent: DS.belongsTo(‘folder‘, { inverse: ‘children‘ })
});

app/models/folder.js

export default DS.Model.extend({
  parent: DS.belongsTo(‘folder‘, { inverse: null })
});
时间: 2024-10-05 18:04:07

7.2 Models -- Defining Models的相关文章

hybris Models

---恢复内容开始--- Models是hybris项目中的一种表现形式,每个item中的配置都有一个与之对应的models类.一个Model包含不同扩展中这个项目的所有属性,从而能直接访问到项目中所有的数据. 他比我们正常JAVA中的pojo要更轻量级并且不需要存储,因此更容易模拟和测试. 基本 Model hybris 有2个基础的Model 1.generation Model类,hybris  Commerce Suite 编译时完成 2.Model 生命周期,在hybris  Comm

第三百七十五节,Django+Xadmin打造上线标准的在线教育平台—创建课程机构app,在models.py文件生成3张表,城市表、课程机构表、讲师表

第三百七十五节,Django+Xadmin打造上线标准的在线教育平台-创建课程机构app,在models.py文件生成3张表,城市表.课程机构表.讲师表 创建名称为app_organization的课程机构APP,写数据库操作文件models.py models.py文件 #!/usr/bin/env python # -*- coding:utf-8 -*- from __future__ import unicode_literals from datetime import datetim

第三百七十六节,Django+Xadmin打造上线标准的在线教育平台—创建用户操作app,在models.py文件生成5张表,用户咨询表、课程评论表、用户收藏表、用户消息表、用户学习表

第三百七十六节,Django+Xadmin打造上线标准的在线教育平台-创建用户操作app,在models.py文件生成5张表,用户咨询表.课程评论表.用户收藏表.用户消息表.用户学习表 创建名称为app_operation的用户操作APP,写数据库操作文件models.py models.py文件 #!/usr/bin/env python # -*- coding:utf-8 -*- from __future__ import unicode_literals from datetime i

7.9 Models -- Connection to An HTTP Server

一.概述 1. 如果你的Ember应用程序需要从一个HTTP服务器加载JSON数据,在你的服务器返回的任何格式中,配置EmberData的过程将会加载records. 2. store使用一个被称为adapter的对象去了解如何与网络通信.默认的,store将会使用DS.RESTAdapter,它是一个adapter,它通过转换经由XHR的JSON与一个HTTP服务器通信. 3. 这节的内容被分为两块.第一个块涵盖了一个适配器的默认行为,包括请求records将访问那些URLS和期望返回什么格式

django-2 models

一个model 对应DB的一张表 models 以类的形式表现: 一些字段.数据的一些行为 对类.类的对象 操作,无需写SQL = >  object relation mapping  ORM 对象关系映射 1. 在应用app:blog 的根目录下 ,有models.py, django自动生成的 在其中创建类(一张数据表),继承 models.Model 在类中创建字段,即属性 class Article(models.Model): title = models.CharField(max

第三百八十节,Django+Xadmin打造上线标准的在线教育平台—将所有app下的models数据库表注册到xadmin后台管理

第三百八十节,Django+Xadmin打造上线标准的在线教育平台-将所有app下的models数据库表注册到xadmin后台管理 将一个app下的models数据库表注册到xadmin后台管理 重点:xadmin的数据表注册,是到app下查找的adminx文件,所以我们必须在app下创建一个adminx.py文件,所有关于数据表注册到xadmin后台的代码都是写在adminx.py文件里 adminx.py文件编写 1.自定义一个类来继承object对象,这个类叫做数据表管理器 数据表管理器里

web框架-(七)Django补充---models进阶操作及modelform操作

通过之前的课程我们可以对于Django的models进行简单的操作,今天了解下进阶操作和modelform: 1. Models进阶操作 1.1 字段操作 AutoField(Field) - int自增列,必须填入参数 primary_key=True AutoField(int自增列) BigAutoField(AutoField) - bigint自增列,必须填入参数 primary_key=True BigAutoField 注:当model中如果没有自增列,则自动会创建一个列名为id的

The Three Models of ASP.NET MVC Apps

12 June 2012  by Dino Esposito by Dino Esposito We've inherited from the original MVC pattern a rather simplistic idea of what should be in the Model. In fact, in ASP.NET MVC, there are three distinct types of model: the domain model, view model and

django froms与models结合使用

下面介绍forms模块如何与后台数据库交互,把from提交过来的数据写入到后台数据库中 froms与model结合使用 1.vim modes.py中创建数据表 from django.db import models class admin(model.Model): gender_tuple=( (1,'男'), (2,'女'), ) username = models.Char Field(max_length=50) email = models.CharField(max_length