91av视频/亚洲h视频/操亚洲美女/外国一级黄色毛片 - 国产三级三级三级三级

  • 大小: 5.41KB
    文件類型: .js
    金幣: 1
    下載: 0 次
    發布日期: 2021-03-12
  • 語言: JavaScript
  • 標簽: react??

資源簡介

react 數量控制器

AMD標準

代碼:

/**
 * @author: zhLee
 * @date: 2015/8/17
 * @remark: 數量控制器
 */
define(['react'],function (React) {
    var RC = React.createClass;

    // 按鈕
    var Ctrl = RC({
        clickFn: function () {
            this.props.handleInput(this.props.type);
        },
        render: function () {
            var cls = this.props.cls,
                dt = this.props.data,
                isPlus = (this.props.type == 'plus'),// 判斷是否為加號點擊
                btn = isPlus ? dt.isMax : dt.isMin,  // 若是加,則判斷btn是否達到最大值,若是減同理。
                callback = isPlus ? dt.maxFn : dt.minFn, //
                param = isPlus ? dt.max : dt.min,
                txt = isPlus ? ' ' : '-';
            if(btn) {// 若達到最大值或最小值,則為按鈕加上disabled calss
                cls = cls   ' '   dt.disabledCls;
                callback(param, dt.val);
            }
            return (
                <a className={cls} href="javascript:;" onClick={this.clickFn}>{txt}</a>
            );
        }
    });

    // 值文本
    var NumTxt = RC({
        getInitialState: function () {
            return {
                val: this.props.data.val
            }
        },
        shouldComponentUpdate: function (nextProps, nextState) {
            /*console.log(this.state.val);
             console.log(nextProps.data.val);*/
            return true;
        },
        // 在組件接收到新的 props 的時候調用 在此函數內this.props是指上一個props
        componentWillReceiveProps: function (nextProps) {
            this.setState({
                val: nextProps.data.val
            });
        },
        _onBlur: function () {
            this.props.handleInput(this.refs.txt.getDOMNode().value);
        },
        _onChange:function (event) {
            this.setState({
                val: event.target.value
            });
        },
        render: function () {
            return (
                <input type="tel" data-flag={this.props.data.flag} ref="txt" className="amount-input" onBlur={this._onBlur}  value={this.state.val} onChange={this._onChange} name="count" />
            )
        }
    });

    // 主體
    return RC({
        getInitialState: function () {
            var dt = this.props.data;
            // 容錯
            if(dt.max < dt.min) {
                dt.max = Infinity;
            }
            return {
                flag: dt.flag || '',                                  // 文本標識
                max: !isNaN(dt.max) ? parseInt(dt.max) : Infinity,    // 最大值
                min: !isNaN(dt.min) ? parseInt(dt.min) : 1,           // 最小值
                val: !isNaN(dt.val) ? parseInt(dt.val) : 1 ,          // 默認值/輸出值
                isMin: true,               // 是否為最小值
                isMax: false,               // 是否為最大值
                onChangeFn: dt.onChangeFn || function () {},      // 文本值改變回調
                maxFn: dt.maxFn || function () {},      // 最大值回調
                minFn: dt.minFn ||function () {},      // 最小值回調
                disabledCls: dt.disabledCls || 'disabled'     // 按鈕不可點類名
            }
        },
        // 測試值是否合法,返回結果
        checkValid: function () {
            var props = this.state,
                min = props.min,
                max = props.max,
                val = props.val,
                isMin =  false,
                isMax = false;

            if(val <= min) {
                val = min;
                isMin = true;
            }
            if(val >= max) {
                val = max;
                isMax = true;
            }
            return {
                isMin: isMin,
                isMax: isMax,
                val: val
            };
        },
        handleInput: function (val) {
            // 獲取上一次值
            var lastVal = this.state.val;

            if(val == 'minus' && lastVal != this.state.min) {
                this.state.val -= 1;
            } else if (val == 'plus' && lastVal != this.state.max) {
                this.state.val  = 1;
            } else if(parseInt(val)){
                this.state.val = parseInt(val) || this.state.min;
            }
            var result = this.checkValid();
            /*console.log(result.val)
             console.log(lastVal)*/
            if(lastVal !== result.val) {
                this.state.onChangeFn(result.val, this.refs.input.getDOMNode());
            }

            this.setState(result)
        },
        render: function () {
            var result = this.checkValid();
            this.state.val = result.val;
            this.state.max = this.props.max || this.state.max;
            // 判斷最大/小值
            this.state.isMax = result.isMax;
            this.state.isMin = result.isMin;

            return (
                <div>
                    <Ctrl type="minus" cls='subtract' data={this.state} handleInput={this.handleInput} />
                    <div className="amount">
                        <NumTxt ref="input" data={this.state} handleInput={this.handleInput}/>
                    </div>
                    <Ctrl type="plus" cls='add' data={this.state} handleInput={this.handleInput} />
                </div>
            );
        }
    });
});

資源截圖

代碼片段和文件信息

評論

共有 條評論