ember-graph, 面向复杂对象图的Ember持久库

分享于 

8分钟阅读

GitHub

  繁體 雙語
Ember persistence library for complex object graphs
  • 源代码名称:ember-graph
  • 源代码网址:http://www.github.com/stingerlabs/ember-graph
  • ember-graph源代码文档
  • ember-graph源代码下载
  • Git URL:
    git://www.github.com/stingerlabs/ember-graph.git
    Git Clone代码到本地:
    git clone http://www.github.com/stingerlabs/ember-graph
    Subversion代码到本地:
    $ svn co --depth empty http://www.github.com/stingerlabs/ember-graph
    Checked out revision 1.
    $ cd repo
    $ svn up trunk
    
    Build StatusCode ClimateCode Climate

    Ember图是 Ember.js的一个数据持久库,它专注于复杂对象图。

    背景

    Ember图诞生于 greenlight.guru,当我们的数据模型把Ember数据推到它的极限时。 我们对数据模型所需的功能只是不在,数据范围内,这意味着我们必须编写自己的数据层。 我们决定从Ember的数据中得到一个清晰的突破。

    目标

    首先构建Ember图,以处理我们专有应用程序的数据模型。 但是在Ember社区的讨论中,我知道其他人面临类似于我们的。 所以从get开始,我就用开放源码构建了Ember图。 Ember图具有许多独特的特性,但库的主要目标是:

    • 足够灵活来处理最复杂的数据模型。
    • 有一个单一的真实来源,并且尽可以能让它达到最新状态
    • ember的数据相似,以允许轻松过渡

    其他较小的目标包括:增强的模式实施。实时更新和对数据的细粒度控制。 长时间使用with数据后,我知道我不喜欢的部分,希望改善这些图形。

    使用Ember图的

    必须注意的是,Ember图并非针对每个人。 ember数据是一个伟大的库,在大多数情况下可能已经足够了。 但在某些情况下,ember数据用户库可以限制它的特性集。 Ember图是用来填补市场上一个小的利基;大多数用户会发现它是多余的。 图形的Ember功能在以下领域中。

    • 复杂对象模型。Ember图是为高度依赖关系的高度连接的对象模型建立的。
    • 大型数据集。Ember图中所有功能都假定是异步的,包括加载数据。 Ember图尝试尽可能少地传输数据。
    • 实时数据更新。具有单一来源的一部分是接收来自的常量更新 truth truth truth。 Ember图使你可以很方便地实时接收最新版本的数据。
    • 复杂数据修改,由于实际数据更新的性质,图能够处理数据的刷新。 of图有几个功能( 还有更多的来),帮助解决不同版本的记录之间的冲突。

    如果任何 上面 适用于你,Ember图很适合你。

    代码

    理解一些东西最简单的方法是看它,所以让我们进入一些代码。 声明模型与ember数据非常相似。

    App.User=EmberGraph.Model.extend({
     name:EmberGraph.attr({
     type:'string',
     readOnly:true }),
     posts:EmberGraph.hasMany({
     relatedType:'post',
     inverse:'author',
     isRequired:false })
    });App.Post=EmberGraph.Model.extend({
     title:EmberGraph.attr({
     type:'string',
     defaultValue:'(No Subject)',
     isValid:function(value) {
     return value &&value.length>0;
     }
     }),
     postedOn:EmberGraph.attr({
     type:'date',
     readOnly:true }),
     author:EmberGraph.hasOne({
     relatedType:'user',
     inverse:'posts' }),
     tags:EmberGraph.hasMany({
     relatedType:'tag',
     inverse:null,
     defaultValue: ['1', '2']
     })
    });App.Tag=EmberGraph.Model.extend({
     title:EmberGraph.attr({
     type:'string' })
    });

    我们声明了三个相关模型,如果你是来自ember的数据,那么大部分都应该非常熟悉。 即使你没有,命名也很有意义。 但是要了解 attrhasManyhasOne 函数如何工作,请查看它们的文档,深入描述它们的所有选项。

    现在,让我们看看,图的真实力量,让我们来看看它的动作。 ,图的最强大特征是真实的一个来源,所以让我们从这个开始。 假设在你的服务器上,用户 #5 拥有 3个帖子: #1, #3 和 #7.

    App.get('store').find('post', '1').then(function(post1) {
     // Get the ID of the relationship without loading itconsole.log(post1.get('_author')); // { type: 'user', id: '5' }// Change the author to #7post1.setHasOneRelationship('author', '7');
     // Now load user #7 in the form of a promisereturnpost1.get('author');
    }).then(function(user7) {
     // Ember Graph is smart enough to know that we connected post #1 to user #7console.log(user7.get('_posts')); // [{ type: 'post', id: '1' }]// Let's save our user, which also returns a promisereturnuser7.save();
    }).then(function(user7) {
     // This is cached, so get it directlyvar post1 =App.get('store').getRecord('user', '1');
     // Ember Graph knows that the relationship was persistedconsole.log(post1.get('_author')); // { type: 'user', id: '7' }console.log(post1.get('isDirty')); // falsereturnApp.get('store').find('user', '5');
    }).then(function(user5) {
     // Ember Graph knows, even if the server doesn't yet,// that user5 and post1 were disconnectedconsole.log(user5.get('_posts')); // [{ type: 'post', id: '1' }, { type: 'post', id: '3' }]});

    如图所示,更改或者加载数据并不重要,Ember图知道当关系被破坏并创建时,即使它们未被加载,也可以应用这些更改。 它还维护关系的状态。 所以在任何时间点,关系都可以是: 全新且不持久,保留但计划删除,或者保持和未更改。 最好的部分是,即使记录是脏的,这些关系也可以在任何时候更新,即使是。 Ember图提供了刷新脏记录的选项,这样你就可以永远不需要使用最常用的信息。

    文档

    很好地说,Ember图的文档非常有用。 我没有足够的时间来写关于如何使用它的好教程。 我向你保证我的名单上是 1号。 在那之前,可以自由查看 API文档,这是不太差的。 如果你需要帮助,请直接问我,我很乐意帮助你。

    得到Ember图

    从 Bower 获得它:

    
    bower install ember-graph-dist
    
    
    
    

    然后 Bower 将获取和提取调试构建。生产构建和Ember图的缩小构建。

    报告问题

    问题可以在GitHub上报告。 通常,我倾向于在一天或者两天内修复 Bug。 功能请求也受欢迎,但可能会花费我更长的时间。

    Ember图

    构建Ember图相当简单。 你首先要克隆存储库。 然后,安装所需的包,包括全局的包。

    
    npm install -g grunt-cli
    
    
    npm install -g bower
    
    
    npm install
    
    
    bower install
    
    
    
    

    之后,你可以使用 grunt release 构建它,或者运行开发模式使用 grunt develop。 开发模式中,源和测试文件在更改时重新编译,测试页在 http://localhost:8000/test/index.html 服务器上。

    赞助商和朋友

    greenlight.guru logo

    Ember图不可能没有 greenlight.guru,因为它从开始以来已经投入了大部分的开发。 这是一个伟大的公司尝试尽可能多的回报社区。


    COM  对象  ember  Persist  graphs  持久化  
    相关文章