美文网首页
2018-03-13新建后返回列表

2018-03-13新建后返回列表

作者: NOTEBOOK2 | 来源:发表于2018-03-13 11:43 被阅读0次

静态方法 Reflect.ownKeys() 返回一个由目标对象自身的属性键组成的数组。

import { browserHistory } from 'react-router';
import { ROUTE as R } from '~/constants';
import { bindPublicMethod } from './bindHelper';
import concat from 'lodash/concat';
import { default as menuConfig } from '@/config/menu';
import _ from 'lodash';

function join(...args) {
  return `/${args.join('/')}`;
}

function go(target) {
  let keys;
  if (typeof Reflect !== 'undefined' && typeof Reflect.ownKeys === 'function') {
    keys = Reflect.ownKeys(target.prototype);
  } else {
    keys = Object.getOwnPropertyNames(target.prototype);
    if (typeof Object.getOwnPropertySymbols === 'function') {
      keys = keys.concat(Object.getOwnPropertySymbols(target.prototype));
    }
  }

  keys.forEach(key => {
    if (key === 'constructor') {
      return;
    }
    let func = (target.prototype || {})[key];
    if (typeof func === 'function') {
      let newKey = 'go' + key.charAt(0).toUpperCase() + key.slice(1);
      target.prototype[newKey] = (...args) => {
        browserHistory.push(func(...args));
      }
    }
  });
  return target;
}

function routeAccessor(prefix, subRoutes) {
  return function wrapped(...args) {
    let params = concat(args[0], subRoutes);
    if (args.length > 1) {
      args.shift();
      params = concat(params, args);
    }
    if (prefix) params = concat([prefix], params);
    return join(...params);
  };
}

function configured(target) {
  _.forEach(menuConfig.DEFAULT, item => {
    let { type, subRoute: route1, children, route, prefix } = item;
    if (type === 'link') {
      bindPublicMethod(target, _.camelCase(route), routeAccessor(prefix, [route]));
    }
    if (type === 'menu') {
      children.forEach(child => {
        let { subRoute, children: subChildren } = child;
        let subRoutes = [route1];
        if (subRoute) subRoutes.push(subRoute);
        subChildren.forEach(c => {
          if (c.subRoute) {
            bindPublicMethod(target, _.camelCase(c.subRoute), routeAccessor(c.prefix, concat(subRoutes, [c.subRoute])));
          }
        });
      });
    }
  });

  return target;
}


@go
@configured
class RouteHelper {
  siteIndex() {
    return `/${R.SITE_PREFIX}`;
  }

  login() {
    return join(R.SITE_PREFIX, R.LOGIN);
  }
}


export default new RouteHelper();

相关文章

  • 2018-03-13新建后返回列表

    静态方法 Reflect.ownKeys() 返回一个由目标对象自身的属性键组成的数组。

  • angular4.x 跳转详情后返回列表界面 搜索参数不重置的解

    angular4.x 跳转详情后返回列表界面 搜索参数不重置的解决方案 angular4.x 跳转详情后返回列表界...

  • Python 按长度分割字符串

    分割后返回字符串列表 分割后返回换行符连接的字符串

  • Perl的reverse和sort操作符

    14. reverse 操作符 读取列表的值(一般来自数组),并按照相反次序返回新的列表。 只是返回倒序后的列表,...

  • 前嗅ForeSpider教程:采集美团网

    以美团为例,通过关键词搜索后的结果列表,由列表进入正文页采集正文数据: 第一步:新建任务 ①点击左上角“加号”新建...

  • React项目实战四

    选择城市列表 选择城市列表渲染后的界面: 1,获取并处理城市列表数据 接口返回的数据结构: 渲染城市列表的数据格式...

  • 2019-10-09课件管理功能部分注意事项

    删除操作的时候需要考虑到查询列表,要在删除后,根据查询列表的数据发起请求,才能正确显示删除后错误显示方式 新建课件...

  • 列表的常用方法

    append():在列表末尾追加新的对象,返回的是修改后的原列表。 count():统计某个元素在列表中出现的次数...

  • React-Native中Redux结合PullList时遇到L

    问题描述 在PullList列表中,需要点击列表的某一行,进入列表的详细信息。然后修改列表的信息后,返回主List...

  • xmind使用

    上钻 & 下钻下钻后,返回原图,主题并不会显示“下钻”图标,当下钻图中存在新建的自由主体时,返回原图后,主题A上将...

网友评论

      本文标题:2018-03-13新建后返回列表

      本文链接:https://www.haomeiwen.com/subject/pgxzfftx.html