Coder Social home page Coder Social logo

wecatch / ember-easy-orm Goto Github PK

View Code? Open in Web Editor NEW
6.0 8.0 2.0 4.74 MB

A easy ORM for ember app, simple and flexible

Home Page: https://wecatch.me/ember-easy-orm

License: MIT License

JavaScript 89.01% HTML 2.94% Makefile 0.12% Handlebars 7.92%
emberjs model ember-addon orm orm-library

ember-easy-orm's Introduction

Ember-easy-orm

Build Status Downloads

Docs

This Ember addon support some basic model layer for ajax request like find, create, delete and so on. When you use this addon, please remove ember-data. It also support some mixin for component to easily manage form

Getting Started

Install

In your ember-cli project, install this addon from npm

ember install ember-easy-orm

or install the latest version from github

npm install https://github.com/wecatch/ember-easy-orm --save-dev

Use this addon in your ember application

In ember-cli project, create one model

ember g model user

modify model/user.js code like this

import EmberObject from '@ember/object';
import model, {DS} from 'ember-easy-orm/mixins/model'

const {attr} = DS;

export default EmberObject.extend(model, {
    url: '/v1/food',
    init(){
        this._super(...arguments);
        this.model = EmberObject.extend({
            'name': attr('string'),
            'desc': attr('string'),
            'pic': attr('array'),
            'province_id': attr('string'),
            'city_id': attr('string'),
            'area_id': attr('string'),
            'town_id': attr('string'),
            'country_id': attr('string'),
            'url': attr('string'),
            'host': attr('string'),
            'tag': attr('array'),
            'user': attr({defaultValue: function(){
                return {name: '', 'gender': ''};
            }})
        });
    }
})

then in any route, you can use store service to connect to your backend server api

import Route from '@ember/routing/route';

import { inject as service } from '@ember/service';

export default class IndexRoute extends Route {
  @service store;

  model() {
    return this.store.find('user');
  }
}

Running Tests

ember test
ember test --server

npm test (Runs ember try:testall to test your addon against multiple Ember versions)

Store service api

Release notes

1.0.1

  • Model add glimmer tracked for template rerender

1.0.0

  • Rewrite to native class
  • Bump to 4.3

0.2.0

  • Bump ember-cli to 3.21.0

0.1.1

  • Serialize request data into json when use post and put method

0.1.0

  • Bump ember-cli to 3.1.0

0.0.9

  • Replace sendAction with normal function call.
  • Bump ember-cli to 2.3.0

0.0.8

0.0.7

2016-06-01

  • add docs
  • add dummy app

0.0.5

2016-01-08

  • fix issues#11

0.0.4

2016-01-06

  • add ajax mixin to support lower level ajax request
  • add ajax, model unit test
  • redesign model mixin for custome response data
  • more flexible model api

0.0.2

2015-10-21

  • fix form mixin to support component
  • fix all model mixin ajax request to return promise

ember-easy-orm's People

Contributors

ember-tomster avatar zhyq0826 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

ember-easy-orm's Issues

ajax do not support contentType json

        if (ajaxSettings.contentType == 'application/json' && ajaxSettings['data'] && (method == "post" || method ==="put")){
            ajaxSettings['data'] = JSON.stringify(ajaxSettings['data']);
        }

when model has object attribute, stringify submodel as json to pass to backend server

model object 类型的属性时, 序列化属性为 json 串, 传到后端, 形如:


export default Ember.Object.extend(model, {
    url: '/v1/shop',
    model: {
        'address':      attr('string'),
        'longitude':    attr('number'),
        'latitude':     attr('number'),
        'url':          attr('string'),
        'user':     attr('object', {defaultValue: function(){
            return Ember.Object.create({'name': '', 'gender': 'f'});   
        }}),
    }
});

user 为object, 表单提交时, 序列化 user

array content contains object

数组内容包含object,需要对object 进行序列化

            if(Ember.isArray(model[key])){
                for (let i = 0; i < model[key].length; i++) {
                    if(typeof model[key][i] === 'object' && model[key][i]){
                        model[key][i] = JSON.stringify(model[key][i]);
                    }
                }
            }

formComponent 和 godComponent 交互进行数据管理

formComponent 代表一条数据单元,godForm 代表一组数据单元, 二者配合完成数据的增,删,改。

当数据发生更改,formComponent 需要通知使用它的上层,发生了什么动作,后端的响应结果如何,此时,formComponent 需要向上层传递后端响应结果和发生改变的 model,上层根据响应结果,动作和发生变化的 model 进行相应处理

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.