Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

深入理解iuap design-12-情定kero #91

Open
GuoYongfeng opened this issue Aug 2, 2016 · 1 comment
Open

深入理解iuap design-12-情定kero #91

GuoYongfeng opened this issue Aug 2, 2016 · 1 comment

Comments

@GuoYongfeng
Copy link
Member

No description provided.

@onvno
Copy link
Contributor

onvno commented Aug 20, 2016

背景介绍

构建大型企业级应用的痛点:

  • 复杂单据
  • 控件复杂,不断扩展
  • 数据格式不固定,运行时动态调整

Kero如何解决这些问题

  • 数据模型可描述。

    kero 使用了描述性的代码风格定义数据模型。数据被存储在ViewModel中,通过数据模型进行访问和修改。

    var viewModel = {
        head : new u.DataTable({
            meta: {
                'pk_org': {
                    'required': true,
                    'associations': {
                        "pk_org": "name"
                    },
                    'associationMeta': 'uap.org'
                },
                'billnumber': {
                    'precision': 2,
                    'required': true,
                    'maxLength': 50
                }
            }
        })
    }
    
  • 统一可扩展的控件描述

    kero使用了描述性的风格来定义控件

    <input type="text" u-meta='{"type":"string", "data":"head", "field":"billnumber"}' />
    

    在普通 HTML 中使用kero语法将在指定DOM上创建控件,并与数据模型关联。一旦创建了关联,控件 将与数据模型同步。每当修改了数据,控件便相应地更新,修改了控件,数据模型也会相应的更新.

  • 数据模型可变

    数据格式可变使得无缝的数据修改称为可能, kero负责把不同控件的数据集中高效地组织并处理,视图层的控件会订阅数据模型及数据的变更,当数据变化时通知相应组件更新,并在客户端维护一份包含所有数据的数据缓存

Kero定位

Kero依托基于 MVVM 架构的 Knockout 类库,实现了将NeoUI控件库自由进行数据绑定的前端类库。主要解决问题:

  • 提供NeoUI完整样式,解决页面UE风格一致的问题
  • 提供了数据模型,实现数据与UI双向绑定,构建数据驱动型页面。解决具有复杂交互的页面开发问题。
  • 依托NeoUI控件库,给开发者带来一站式完整前端解决方案

Kero设计理念

  • 数据模型

    数据模型主要是对MVVM架构中的Model层做增强处理。主要功能有:

    • 以行、列的形式对数据做存储,并对外暴露一批增删改查的API,方便开发者对页面数据的处理,而且所有开发者之间做到统一,减少出错概率。
    • 数据增加状态标识新增或修改,方便开发者使用。
    • 具有分页缓存能力,可在前台处理分页(非必要情况下,不推荐前台分页)。
    • 具有事件触发器,把数据变化触发出去,供开发者监听使用。
  • 控件模型

    控件模型是为解决复杂交互页面中,业务逻辑对数据存在一系列处理需求而设计的。用来简化开发者对相关逻辑的开发。比如:数据的必填、数据的各种校验、数据的显示格式等。

起步

  1. 引入Kero文件及相关依赖

    <!DOCTYPE html>
    <html lang="en">
    <head>
     <meta charset="UTF-8">
     <title>Kero Getting Started</title>
    </head>
    <body>
    
     <script src="http://design.yyuap.com/static/jquery/jquery-1.9.1.min.js"></script>
     <!--引入knockout依赖-->
     <script src="http://design.yyuap.com/static/knockout/knockout-3.2.0.debug.js"></script>
     <!--引入核心js文件-->
     <script src="http://design.yyuap.com/static/uui/latest/js/u.js"></script>
    </body>
    </html>
    

  2. 兼容IE8

    如需兼容IE8,需要在引入其他JS文件之前加载u-polyfill.js

    <!--[if lte IE 8]>
     <script src="http://design.yyuap.com/static/uui/latest/js/u-polyfill.js"></script>
    <![endif]-->
    
  3. 快速上手:绑定数据,实现hello world

    // JS
    var app,viewModel;
    
    /**
    * `viewModel = {...}`创建数据模型
    * `dt1` 创建名为`dt1`的`u.DataTable`数据集
    * `f1` 创建名为`f1`的字段,为`dt1`数据集的一个子集
    */
    viewModel = {
       dt1: new u.DataTable({
           meta:{
               f1:{
                   type:'string',
                   maxLength:12
               }
           }
       })
    };
    
    /**
    * `app = u.createApp({...})`,页面初始化,创建框架服务
    * `el` 指定服务对应的顶层DOM
    * `setValue`进行赋值操作
    */
    app = u.createApp({
       el:'body',
       model:viewModel
    });
    
    var r = viewModel.dt1.createEmptyRow();
    r.setValue('f1','Hello World');
    
    /**
    * getValue 获取字段对应的值
    */
    var demoDiv = document.getElementById('demo_div');
    var dtVal = viewModel.dt1.getValue('f1');
    demoDiv.innerHTML = dtVal;
    
    <!-- HTML -->
    <div id="demo_div"></div>
    

API及示例

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants