美文网首页WEB前端程序开发微信开发运营
[教程]如何创建一个兼容「微信小程序」的Web框架:WIN

[教程]如何创建一个兼容「微信小程序」的Web框架:WIN

作者: c14328d5898b | 来源:发表于2016-10-05 07:19 被阅读0次

    在「微信小程序」带领Web走向封闭之前,让我们创造一个Neo的种子。如果有可能的话,那么有一天,它终将成为Neo。

    从微信小程序开始内测时,很多人(也包括我)都在考虑这样的问题:「微信小程序」正在让Web走向封闭。我的第一反应是:创建一个兼容「微信小程序」的Web框架——它即可以在微信上运行,也可以在Web上,还有作为一个混合应用运行。

    在微信web开发者工具里,它封装了足够多的细节。我们只需要写一些我们不知道它们是如何真正工作的代码,流量都这样被截胡了。虽然,我们无法改变这个即将发生的事实,但是我们可以向那些愿意走向开放的人一个更好的解决方案。因为「微信小程序」的框架是叫MINA,所以让我们称呼这个框架为WINV。

    设计构思基本的设计点有:

    兼容微信小程序的语法——它并没有多少复杂的语法。只是简单的Virtual DOM操作,以及事件绑定

    尽可能兼容大部分的微信API,兼容所有的微信API几乎是不可能的。

    提供一个Virtual DOM转换的混合应用插件。

    在之前的文章里,我们提到了MINA框架的基本原理,也差不多就是组件:

    WXML转JSON VirtualDOM组件

    Virtual DOM组件,并在这其中提供双向绑定

    UI组件转换器,即将WXML转换为Web浏览器中的标签

    UI组件,需要有一套UI组件,最好是和小程序保持一致,如WEUI

    AMD组件,提供模块化需求。

    **一个****WINV****框架的****Demo****
    **
    计划了好几天的Demo,终于写完了,并且可以出来溜溜了~~。

    这份代码在GitHub上,欢迎试玩:GitHub - phodal/winv: A mini compatible MINA for web

    并创建一个更好的出来,毕竟国庆要和我们家 ‘花仲巴’出去玩。

    好了,看我们的代码,这还只是一个丑陋的原型,但是差不多可以解释了。

    var App = winv.App;var Page = winv.Page;App({ onLaunch: function() { console.log('On Launch'); }});Page({ data: { motto: 'hello, world' }, onLoad: function() { console.log('On Load'); }});winv.setTemplate('<view class="container"><text class="user-motto">{{motto}}</text></view>')winv.appRun();
    它在页面上的运行结果就是,输出一个 hello, world
    。顺便吐槽一句,微信小程序自带的hello world不是标准的hello world。Wiki上说:

    但是需要注意的是,Hello World的标准程序是“hello, world”,没有感叹号,全部小写,逗号后面有空格,与现在流行的写法并不一致。

    出于原型的原因考虑,没有像MINA一样,使用大量的事件来触发,只是简单的Run:

    var domJson = this.stringToDomJSON(this.template)[0];var dom = this.jsonToDom(domJson);document.getElementById('app').appendChild(dom);for (var event in window.eventPool) { window.eventPoolevent;}
    第一步,将上面的Template转化为JSON格式的Template,由DOMParser将其转换为DOM,并在这个时候添加一个Page标签。然后在转换的时候,顺便做一些更新的数据操作。第二步,这个JSON DOM在转换成真实的DOM的时候,应该要添加事件绑定,只是还没有实现。第三步,上面的DOM会被放到app ID里,结果就变成了

    <winv-div class="page"> <winv-div class="page__hd"> <winv-view class="container"> <winv-text class="user-motto">hello, world</winv-text> </winv-view> </winv-div></winv-div>
    一看就知道还有好多坑要填。

    第四步,则是调用上面的on方法,写得比较简单、粗暴。

    至于,对事件和数据的判断还是和MINA一致:

    if('on' === option.slice(0, 2))
    简单,而又粗暴。

    就这样啦~~,你还有什么想知道的吗?欢迎留言,并关注:

    Hello小程序将与您共同成长。微信号:130870319 QQ群:40726600

    相关文章

      网友评论

        本文标题: [教程]如何创建一个兼容「微信小程序」的Web框架:WIN

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