最近在写一个微信编辑器,然后已经在编辑器那一块选定了CKEditor,想想觉得UEditor虽然不错,但是似乎已经很不更新了。
想想觉得编辑器这种东西,对于一般人来说还算挺常用的,但想着是不是可以作为一个LTS??然后发现给CKEditor写写plugin,还是蛮方便的。
技术选型
选用怎样的前端框架是一个有趣的话题,我需要一个数据绑定和模板。首先,我排除了React这个框架,我觉得他的模板会给我带来一堆麻烦事。Angluar是一个不错的选择,但是考虑Angluar 2.0就放弃了,Backbone也用了那么久。Knockout.js又进入了我的视野,但是后来我发现数据绑定到模板有点难。最后选了Ractive,后来发现果然上手很轻松。
补充一句,这个框架比React诞生早了一个月,还是以DOM为核心。Ractive自称是一个模板驱动UI的库,在Github上说是下一代的DOM操作。因为Virtual Dom的出现,这个框架并没有那么流行。
Ractive是什么?
起先,这个框架是在卫报创建的用于产生新闻的应用程序 。有很多工具可以帮助我们构建Web应用程序 ,但是很少会考虑基本的问题:HTML,一个优秀的静态模板,但是并没有为交互设计。Ractive可以将一个模板插到DOM中,并且可以动态的改变它。
下面是一个简单的Hello,World。
<script id='template' type='text/ractive'> <p>Hello, {{name}}!</p> </script> <script> var ractive = new Ractive({ template: '#template', data: { name: 'world' } }); </script>
这个Hello,World和一般的MVC框架并没有太大区别,甚至和我们用的Backbone很像。
然后,让我们来看一个事件的例子:
listView = new Ractive({ el: 'sandboxTitle', template: listTemplate, data: {color: config.defaultColor, 'fontSize': config.defaultFontSize} }); listView.on('changeColor', function (args) { listView.set('color', args.color); });
这是的on,需要你在某个地方Fire:
titleView.fire('changeColor', {color: color.toHexString()});
接着,问题来了,这和我们jQuery的on,或者React的handleClick似乎没有太大的区别。接着Component来了:
var Grid = Ractive.extend({ isolated: false, template: parasTemplate, data: { } }); var dataValue = 5; var category = 'category-3'; var color = config.defaultColor; parasView = new Ractive({ el: 'parasSanbox', template: '<Grid Style="{{styles}}" />', components: {Grid: Grid}, data: { styles: [ {section_style: 'border: 2px dotted #4caf50; margin: 8px 14px; padding: 10px; border-radius: 14px;', p_style: 'font-size: 14px;', color: color, data_value: dataValue, category: category}, ] } }); parasView.on('changeColor', function(args) { parasView.findComponent('Grid').set('Style.*.color', args.color); });
上面是在 https://github.com/phodal/congee 中用到的多个模板的View,他们用了同一个component。
好吧,说实在的它并没有什么神奇之处。这些功能React都有了,而且它还没有Angluar强大。但是,我们可以使用模板,HTML模板。而这是我们最需要的场景,而且不需要抛弃现有的代码。