4.5.4 • Published 9 years ago

@beisen/tub v4.5.4

Weekly downloads
2
License
ISC
Repository
gitlab
Last release
9 years ago

介绍

此项目是把原来的 Talent UI Builder中的核心的功能分离了出来,方便不同的项目进行接入

使用说明

安装到项目中

npm install @beisen/tub --save

Class

export default Workspace;
export {UIBuilderState, Workspace, Viewer};

Workspace ReactComponent

编辑器

Viewer ReactComponent

渲染器

TubState static class

数据

示例代码

编辑器

//引入Tub
import Workspace, {Tub} from '@beisen/tub';
//引入样式
import '@beisen/tub/style.css';
//组件代码
class Home extends Component {

  constructor(props, contents){
    super();
    this.state = {tubState: TubState.create()};
  }

  handleChange(tubState){
     this.setState({tubState})
  }

  render() {
    return (
        <Workspace 
          components={components}
          propsComponents={propsComponents}
          templates={templates}
          previewUrl="#/view"
          onChange={::this.handleChange}
          onSave={::this.handleSave}
          />
          
    );
  }
}

渲染器

import {Viewer, UIBuilderState} from '@beisen/tub';
import '@beisen/tub/style.css';

export default class View extends Component{
    constructor(props){
        super(props)
        let data = JSON.parse(window.localStorage.uibuilder)
        this.state = {
            tubState: TubState.create(data)
        }
    }

    renderComponent(Comp,data, mergeProps){
        return <Comp data={data} {...mergeProps}/>
    }

    componentWillReceiveProps(nextProps){
        this.setState({
            tubState: tubState.setContent(nextProps.data)
        });
    }
    
    render(){
        return <Viewer  
                tubState={this.state.tubState}
                components={Elements} 
                templates={PageTemplate}
                renderComponent={::this.renderComponent}
                onChange={(tubState) => {this.setState({tubState})}}
            />
    }
}

参数说明

components object Workspace & Viewer

供拖拽的组件列表

项目代码示例

import Text from './Text';
import LinkList from './LinkList';
import Form from './Form';
import Header from './Header';
import DataTable from './DataTable';
import ImgSlider from './ImgSlider';
import VideoPlayer from './Video';
import ButtonGroup from './ButtonGroup';
import MoChart from './MoChart';
import Charts from './Charts'
import MoFilters from './MoFilters';

export default {
    ButtonGroup,
    DataTable,  
    LinkList, 
    Form, 
    Header, 
    MoChart,  
    ImgSlider, 
    Text, 
    VideoPlayer,
    Charts, 
    MoFilters,
};
propsComponents object Workspace

给组件提供属性编辑的组件列表

templates object Workspace & Viewer

页面可用的模板列表

tubState instance of TubState Workspace & Viewer

通过 UIBuilderState 创建state的key, UI Builder编辑的结果可以用这个key取出来

previewUrl string Workspace

预览结果的地址,因为模拟设备需要使用iframe来模拟尺寸,所以需要在本地部署一个viewer来展示编辑的结果

onSave function Workspace

点击保存按钮的时候执行的回调

onChange function Workspace & Viewer

renderComponent function Workspace & Viewer

定义

 function renderComponent(Comp){
	/* 自定义的组件渲染方法
	 * @Comp, 用来渲染的组件
	 * 请注意 data属性是用来接收editableData的属性,请不要覆盖此属性
	*/
	//示例
	return <Comp />
}

关于模板

在Tub中,模板是Workspace和Viewer都支持的一属性,是用来渲染创建的页面的公共内容的。开发者可以以开发组件的方式开发出一个模板,并通过this.props.children指定自定义布局的区域。

除了模板有固定的可配置的属性外,还支持getEditProps方法,为模板定制可配置的属性。方法同组件配置可编辑属性。 详情参见项目中的examples

示例代码

关于属性编辑

在使用UI Builder编辑器的时候需要传入components和propComponents

components是展示的组件, propComponents是对组件进行编辑的组件

在对开发一个components组件时,需要定义一个静态属性, 下面是一个最简单的components, 只有一个可编辑属性

展示组件的示例代码

class Text extends Component {
   
    static getEditProps(){
        return [
            {
                pType: 'PropsText', //propComponent 类型
                name: '编辑内容', //在属性编辑面板的显示名字
                key: 'value', //编辑结果存储的key,
                defaultValue: 'text' //此字段的默认值
            }
        ]
    }
    
    render() {
        let {mode, data/*数据*/ } = this.props;
        if(mode===1){
            return <div>Text Preview</div>
        }else{
            return <div>{data.value/*从数据中取编辑结果的字段*/ || 'Text'}</div>
        }
    }
}

export default Text;

编辑属性组件的代码

import React, {Component, PropTypes} from 'react';
import './Text.scss'
import {Input} from 'components/common/form'

class PropsText extends Component {

    handleSave(val) {
    		//this.props.update方法所有属性编辑组件都可以使用,表示应用编辑结果
        let {update} = this.props; 
        update(val) 果
    }

    render() {
    		/*
    			因为一个属性编辑组件只对应展示组件中的一个属性字段,所以数据统一放在this.props.data中
    		*/
    		let {data} = this.props;
        return <Input value={data} placeholder='空白内容'
            onChange={this.handleSave.bind(this) } />
    }
}

export default PropsText;

组件通信机制

流程

4.5.4

9 years ago

4.5.3

9 years ago

4.5.2

9 years ago

4.5.1

9 years ago

4.5.0

9 years ago

4.4.6

9 years ago

4.4.5

9 years ago

4.4.3

9 years ago

4.4.2

9 years ago

4.4.1

9 years ago

4.4.0

9 years ago

4.3.13

9 years ago

4.3.12

9 years ago

4.3.11

9 years ago

4.3.10

9 years ago

4.3.9

9 years ago

4.3.8

9 years ago

4.3.7

10 years ago

4.3.6

10 years ago

4.3.5

10 years ago

4.3.4

10 years ago

4.3.2

10 years ago

4.3.1

10 years ago

4.3.0

10 years ago

4.2.3

10 years ago

4.2.2

10 years ago

4.2.1

10 years ago

4.2.0

10 years ago

4.1.6

10 years ago

4.1.5

10 years ago

4.1.4

10 years ago

4.1.3

10 years ago

4.1.2

10 years ago

4.1.1

10 years ago

4.1.0

10 years ago

4.0.4

10 years ago

4.0.3

10 years ago

4.0.2

10 years ago

4.0.1

10 years ago

4.0.0

10 years ago

4.0.0-beta

10 years ago

3.0.6

10 years ago