NPM包管理中的陷阱

随着前端生态不断欣欣向荣的发展,NPM已成为了最大包管理分发平台。
但是问题也越来越多,比如一年前的left-pad事件,导致了大量的项目无法正常运行,正因为如此又出现了yarn,准备纠正一些问题。

最近接手了一个旧的项目,顺利的踩到了NPM中的一个坑,记录这次采坑经历,为今后时时敲响警钟。
项目中用到了dcodeIO/protobuf.js这个库解析数据,因为用到了json的描述文件,因此采用了light library方式进行使用。

Read More

Hexo站点的一些配制总结

这段时间重新收拾了一下Github Pages上的博客信息,也更新了新版本的Hexo。
为了能更友好的对待搜索引擎,针对性的做了一些优化。

1、支持Rss订阅

需要安装hexo-generator-feed插件,hexo generate的时候就会在站点根目录中生成atom.xml,Rss订阅器有了这个xml后就能获取相关的文章内容了。

1
$ npm install hexo-generator-feed

2、支持搜索引擎收录

安装hexo-generator-sitemap插件,hexo generate的时候会在站点根目录中生成sitemap.xml,这个xml的使用会在下面具体说说使用方式。

1
$ npm install hexo-generator-sitemap

Read More

XP系统中,客户端软件导致系统不能正常访问网络的问题记录

最近接到了一些用户的反馈,打开我们的客户端软件后,不仅登录不上,而且还会导致浏览器不能正常访问网络。不过这部分用户有一个共同的特征:用的XP系统。虽然XP已经落后这个时代了,但是也不能彻底放弃它,毕竟用户还在上面。

所以就开始了漫长的问题查找,首先要复现出用户的问题。在XP的虚拟中成功复现了问题,那么查原因就好办多了。

Read More

关于Qml中的model绑定问题

Qml中ListView,GridView等视图组件可以通过model属性绑定数据源,通过delegate进行渲染。model属性可以有多种选择,可以是ListModel类型,也可以是数字,或者JavaScript中的数组。Repeater组件中的model更是可以接收任意类型。

A ListView displays data from models created from built-in QML types like ListModel and XmlListModel, or custom model classes defined in C++ that inherit from QAbstractItemModel or QAbstractListModel. A ListView has a model, which defines the data to be displayed, and a delegate, which defines how the data should be displayed. Items in a ListView are laid out horizontally or vertically. List views are inherently flickable because ListView inherits from Flickable.

Read More

Qml中单例的使用

1、Qml中的单例实现

  • 编写组件
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    //ThemeManager.qml
    pragma Singleton //单例标志
    import QtQuick 2.0
    Item {
    property string name: "singleton"
    }
    ```
    * 建立连接
    相同目录下,新建qmldir文件,
    在文件中添加`singleton ThemeManager 0.1 ThemeManager.qml`
    * 使用
    其他qml中,只要import ThemeManager.qml所在的文件夹路径就能直接使用ThemeManager 这个单例了。
    <!--more-->
    2、Qml文件使用C++的提供的单例
    * 创建继承自QObject的C++类,datachannel
    * main.cpp中定义对应的变量和方法,并进行注册

DataChannel * channel = NULL;

static QObject datachannel_singletontype_provider(QQmlEngine engine, QJSEngine *scriptEngine)
{
Q_UNUSED(engine)
Q_UNUSED(scriptEngine)

return channel;

}

qmlRegisterSingletonType(“Demo.Channel”, 1, 0, “Channel”, datachannel_singletontype_provider);

1
* Qml中使用,导入对应的模块后,就能直接调用了。

// 导入C++中注册的连接模块
import Demo.Channel 1.0;
Item {
id: channel;
property int state: Channel.getState();
}
```

3、Qml中使用JS文件

只需要在js文件中,添加`.pragma library`的标识,然后在Qml中通过别名的方式引用。如下:
`import "../js/Util.js" as Util`