Avalon中文长字符截取、关键字符隐藏、自定义过滤器

关于AvalonJS

avalon是一个简单易用迷你的MVVM框架,它最早发布于2012.09.15,为解决同一业务逻辑存在各种视图呈现而开发出来的。 事实上,这问题其实也可以简单地利用一般的前端模板加jQuery 事件委托 搞定,但随着业务的膨胀, 代码就充满了各种选择器与事件回调,难以维护。因此彻底的将业务与逻辑分离,就只能求助于架构。 最初想到的是MVC,尝试过backbone,但代码不降反升,很偶尔的机会,碰上微软的WPF, 优雅的MVVM架构立即吸引住我,我觉得这就是我一直追求的解决之道。

MVVM将所有前端代码彻底分成两部分,视图的处理通过绑定实现(angular有个更炫酷的名词叫指令), 业务逻辑则集中在一个个叫VM的对象中处理。我们只要操作VM的数据,它就自然而然地神奇地同步到视图。 显然所有神秘都有其内幕,C#是通过一种叫访问器属性的语句实现,那么JS也有没有对应的东西。 感谢上帝,IE8最早引入这东西(Object.defineProperty),可惜有BUG,但带动了其他浏览器实现它,IE9+便能安全使用它。 对于老式IE,我找了好久,实在没有办法,使用VBScript实现了。

Object.defineProperty或VBS的作用是将对象的某一个属性,转换一个setter与getter, 我们只要劫持这两个方法,通过Pub/Sub模式就能偷偷操作视图。为了纪念WPF的指引,我将此项目以WPF最初的开发代号avalon来命名。 它真的能让前端人员脱离DOM的苦海,来到数据的乐园中!

题外话:

最近接手一个项目,前端采用avalon这个mvvm框架,对于先前接触过angularjs的人来说,总感觉avalon还是“太”轻量了(非褒义)

网上为avalon背书的无外乎是说:国产,体积小,逃离dom操作,上手难度低,兼容ie6;劣势是:“然而avalon也有自己的劣势——知名度较低”,呃,我想静静.....

吐槽jquery过渡依赖选择器,繁杂的dom操作,可是avalon的ajax和动画效果还得指望其他控件,实际上往往却又是和jquery搭配使用,吐槽jquery,却又离不开jquery,真是悲剧... 说angular非常难上手,ng上手难度低好不,ng生态好,功能强大,文档和翻译齐全,社区成熟活跃,官方插件第三方插件一大堆。

性能问题,为了平衡开发效率和性能,这只是一种选择问题。用过ng的人,也不会担心什么性能问题吐槽angular版本兼容性。可Avalon还是出现这样的声明:“注意 : 以上三个分支都比较稳定, 但互相不太兼容。 建议直接用2.0。”

以上只是吐槽那些文案背书,avalon也算一个不错的框架,也一直在优化改进和吸收那些知名MVVM框架的优点,比如2.0版本,就新增了4个数组的过滤器,指令也进入了to do list。

希望哪天用过angular的人再来用avalon后都会说:哎哟,不错哦!

分享两个非常简单的过滤器:隐藏关键字符和字符截短。同样也可以迁移到ng。后期还有不错的过滤器,还往这里面加

keyword:avalon,自定义,过滤器,中文,长字符,截短,截断,truncate,隐藏字符,angular

隐藏关键字符

可能需要在前端某些页面上隐藏一些关键信息(如果真正要隐藏,还是需要后端来处理),那么可以用到:

/**
* 隐藏字符串中关键code ,隐藏字符默认为'*'
* 例如隐藏手机号,卡号:1890000000 - 189****0000; {{str|hide_code(3,4,'*')}}
* @param str
* @param pos 开始位置
* @param length 替换字符个数
* @param newChar 替换的字符/字符串
* @returns {*}
*/
avalon.filters.hide_code = function (str, pos, length, newChar) {
pos = pos || 0;
length = length || 0;
newChar = newChar || '*';
if (pos < 0 || length <= 0 || pos + length > str.length) {
return str;
}
var repStr = "";
for (var i = 0; i < length; i++) {
repStr += newChar;
}
return str.slice(0, pos) + repStr + str.slice(pos + length, str.length);
}

长字符截短(按字符截取,中文占两字符-改进版)

原avalon的truncate过滤器,是按照中文英文均占一个字符来截取。该过滤器改进为中文占两个字符英文一个字符来进行截取

/**
* 对长字符串截短,以字符长度截取,中文占两字符;{{str|truncatex(4,'...')}}
* @param str
* @param length,新字符串长度(按照英文字符算,一个中文占两字符),包含truncation的字符个数
* @param truncation,新字符串的结尾的字段
* @returns {返回新字符串}
*/
avalon.filters.truncatex = function (str, length, truncation) {
var chinese_pattern = /[\u4E00-\u9FA5]|[\uFE30-\uFFA0]/gi;
// [\u4E00-\u9FA5]表示汉字,[\uFE30-\uFFA0]表示全角
str = str || " ";
length = length || 30;
truncation = typeof truncation === "string" ? truncation : "...";
var chineseIn = function (s) {
return chinese_pattern.exec(s) ? true : false;
};
var calcSize = function(source){
var strTemp = source.replace(chinese_pattern, "aa");
return strTemp.length;
};
var recursion = function (source, length) {
if (calcSize(source) <= length || (!chineseIn(source))) {
return source;
} else {
return recursion(source.slice(0, source.length - 1), length);
}
};
var sliceLength = length - truncation.length;
return calcSize(str) > length ? recursion(str.slice(0, sliceLength), sliceLength) + truncation : String(str);
}

以上所述是小编给大家介绍的Avalon中文长字符截取、关键字符隐藏、自定义过滤器的相关知识,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对我们网站的支持!

(0)

相关推荐

  • avalonjs制作响应式瀑布流特效

    布局不是基于float,也不是基于绝对定位,看最下面的html,css就知道了.也没有满篇烦人的html插入,代码很清爽 function getIndex(index) { if (index < 10) { index = "00" + index; } else if (index < 100) { index = "0" + index; } return index; } var $ = function(id) { return docume

  • javascript使用avalon绑定实现checkbox全选

    duplex双工绑定是avalon绑定里面最有趣的一个,因为它在内部帮开发者做了很多事,让开发者写的代码减少,代码更优雅.下面随便演示一个常见的checkbox全选. 要求:(老掉牙了,还是说一下) 1.勾选了全选框后,下面的子选框全被勾选:没勾选全选框,则子选框全部不勾选 2.子选框如果有一个未勾选,则取消全选框勾选: 3.子选框全部勾选,则勾选全选框 <!DOCTYPE html> <html> <head> <meta http-equiv="Co

  • vue,angular,avalon这三种MVVM框架优缺点

    本文的主要内容是参考官方文档说明总结而来: Vue.js Vue.js @尤雨溪 老师写的一个用于创建 web 交互界面的库,是一个精简的 MVVM.从技术角度讲,Vue.js 专注于 MVVM 模型的 ViewModel 层.它通过双向数据绑定把 View 层和 Model 层连接了起来.实际的 DOM 封装和输出格式都被抽象为了Directives 和 Filters.Vue.js和其他库相比是一个小而美的库,作者的主要目的是通过一个尽量简单的 API 产生可反映的数据绑定和可组合的视图组件

  • avalonjs实现仿微博的图片拖动特效

    效果: HTML: <div id='post_img' ms-controller='post_img'> <ul id='post_img_inner' ms-mousemove='onmousemove'> <li ms-repeat-el="post_img_list" class='inline-block' ms-mousedown='onmousedown($event,$index,el)' ms-attr-id='post_img_ite

  • avalon js实现仿google plus图片多张拖动排序附源码下载

    源码下载:http://xiazai.jb51.net/201509/yuanma/drag_sort1(jb51.net).rar 效果展示如下: google plus 拖动+响应式效果: 要求 1. 两边对齐布局,即图片间间距一致,但左右两边的图片与边界的间距不一定等于图片间间距,兼容ie7,8,firefox,chrome. 2. 浏览器尺寸变化,在大于一定尺寸时,每行自动增加或减少图片,自动调整图片间间距,以满足两边对齐布局,这时每张图片尺寸固定(这里是200*200px):而小于一定

  • avalon js实现仿微博拖动图片排序

    下文针对仿微博图片随意拖动,调整图片的顺序,讲解的很详细,文章肯定还有欠缺的地方,欢迎提出批评改正.废话不多说了,看具体内容吧. 点击此处进入源码下载 什么是拖动图片排序? 就像微博这种,上传后允许用户通过拖动图片,调整几张图片的顺序. 可以看到微博在这里把每张图片固定了尺寸,稍微严谨点的话,就需要像上一篇文章那样,外面是响应式的等高等宽的若干div容器,里面则是等比例缩放的响应式图片. 下面说下要求. 1.当然首先图片要可以拖动. 2.图片移出其原本的位置,拖动到目标位置并且未松开鼠标完成拖动

  • Avalon中文长字符截取、关键字符隐藏、自定义过滤器

    关于AvalonJS avalon是一个简单易用迷你的MVVM框架,它最早发布于2012.09.15,为解决同一业务逻辑存在各种视图呈现而开发出来的. 事实上,这问题其实也可以简单地利用一般的前端模板加jQuery 事件委托 搞定,但随着业务的膨胀, 代码就充满了各种选择器与事件回调,难以维护.因此彻底的将业务与逻辑分离,就只能求助于架构. 最初想到的是MVC,尝试过backbone,但代码不降反升,很偶尔的机会,碰上微软的WPF, 优雅的MVVM架构立即吸引住我,我觉得这就是我一直追求的解决之

  • shell字符截取命令之cut命令的实例详解

    shell字符截取命令之cut命令的实例详解 一 语法 cut [选项] 文件名 选项: -f 列号:提取第几列 -d 分隔符:按照指定分隔符分割列 二 实战 [root@localhost ~]# cat student.txt 1 furong F 85 2 fengj F 60 3 cang F 70 [root@localhost ~]# cut -f 2 student.txt furong fengj cang [root@localhost ~]# cut -f 2,4 stude

  • oracle截取字符(substr)检索字符位置(instr)示例介绍

    一:理论 oracle 截取字符(substr),检索字符位置(instr) case when then else end语句使用 收藏 常用函数:substr和instr 1.SUBSTR(string,start_position,[length]) 求子字符串,返回字符串 解释:string 元字符串 start_position 开始位置(从0开始) length 可选项,子字符串的个数 For example: substr("ABCDEFG", 0); //返回:ABCD

  • asp.net下比较两个等长字符串是否含有完全相同字符(忽略字符顺序)

    例如:"北京欢迎你"和"欢迎你北京",于是有了下列的测试,但是发现效率应该还有提升的空间,不知道有没有其他更好的办法. 刚开始是这样想的,判断两个字符串中的字符是否含有完全相同的字符需要两个条件 1,两个字符串长度相同 2,两个字符串中的每个字符都在对方的串中 比如前面说的:"北京欢迎你"和"欢迎你北京",于是有了下面的一段代码: 复制代码 代码如下: private static bool CompareStringByCh

  • thinkphp中字符截取函数msubstr()用法分析

    本文实例讲述了thinkphp中字符截取函数msubstr()用法.分享给大家供大家参考,具体如下: ThinkPHP有一个内置字符截取函数msubstr()如下: msubstr($str, $start=0, $length, $charset="utf-8", $suffix=true) $str:要截取的字符串 $start=0:开始位置,默认从0开始 $length:截取长度 $charset="utf-8":字符编码,默认UTF-8 $suffix=tr

  • Python查找最长不包含重复字符的子字符串算法示例

    本文实例讲述了Python查找最长不包含重复字符的子字符串算法.分享给大家供大家参考,具体如下: 题目描述 请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字符串的长度.例如在"arabcacfr"中,最长的不包含重复字符的子字符串是"acfr",长度为4 采用字典的方法,最后输出所有最长字符的列表 算法示例: # -*- coding:utf-8 -*- #! python3 class Solution: def __init__(self):

  • python实现根据指定字符截取对应的行的内容方法

    工作中遇到的,在一个.c文件中有很多函数,这个.c是自动生成的,需要将所有的函数通过extern放到.h中,每个函数都是UINT32 O_开头,通过正则表达式进行字符匹配以及通过linecache来截取特定行. 代码如下: #! /usr/bin/env python # encoding:utf-8 # ! /usr/bin/env python # encoding:utf-8 import re import linecache file = 'D:\PUSCH_job3.txt' out

  • Vue通过字符串关键字符实现动态渲染input输入框

    目录 问题描述 { xxx } 标识字符渲染Dom 组件设计 组件开发 重点 输入完成事件 动态编辑文本 今天做一个简单的demo,就是有一个字符串,字符串里面有标识符,前端检测到标识符之后,需要将这个标识符转换成一个 input 输入框并且进行数据输入和绑定功能. 问题描述 就比如现在有这样一个字符串: 你好,我是{name},我今年{age} 岁,我喜欢的运动是{play}. 前端需要把 {xxx} 及其包裹的内容转变成一个输入框渲染出来,并且呢,当在输入框输入数据的时候,需要对输入的内容进

  • Python实现针对含中文字符串的截取功能示例

    本文实例讲述了Python实现针对含中文字符串的截取功能.分享给大家供大家参考,具体如下: 对于含多字节的字符串,进行截断的时候,要判断截断处是几字节字符,不能将多字节从中分割,避免截断后乱码 下面给出utf8和gb18030上的实现, 用任何一种都可以,可以先进行转码,用encode, decode; 方法1:对utf8: def subString(string,length): if length >= len(string): return string result = '' i =

  • C++宽字符与普通字符的转换实例详解

    C++宽字符与普通字符的转换实例详解 把字符串转换成宽字符串, 实例代码: wstring string2Wstring(string sToMatch) { #ifdef _A_WIN int iWLen = MultiByteToWideChar( CP_ACP, 0, sToMatch.c_str(), sToMatch.size(), 0, 0 ); // 计算转换后宽字符串的长度.(不包含字符串结束符) wchar_t *lpwsz = new wchar_t [iWLen + 1];

随机推荐