add click response callback

This commit is contained in:
王劲鹏 2021-03-19 18:02:17 +08:00 committed by osborn
parent ace6d87bda
commit 2b277a44f4
4 changed files with 52 additions and 3 deletions

View File

@ -56,6 +56,14 @@ QJSValue DoricNativeJSE::invokeObject(QString objectName, QString functionName,
}
}
args.push_back(arg);
} else if (variant.type() == QVariant::StringList) {
QStringList array = variant.toStringList();
QJSValue arg = mJSEngine.newArray(array.size());
for (int i = 0; i != array.size(); i++) {
arg.setProperty(i, array.at(i));
}
args.push_back(arg);
}
}

View File

@ -1,5 +1,6 @@
#include <QJSValueIterator>
#include "../utils/DoricConstant.h"
#include "../utils/DoricUtils.h"
#include "DoricSuperNode.h"
#include "DoricViewNode.h"
@ -115,9 +116,41 @@ void DoricViewNode::blend(QQuickItem *view, QString name, QJSValue prop) {
view->setProperty("y", prop.toInt());
} else if (name == "corners") {
view->setProperty("radius", prop.toInt());
} else if (name == "layoutConfig") {
} else if (name == "onClick") {
if (prop.isString())
clickFunction = prop.toString();
} else {
qCritical() << name << ": " << prop.toString();
}
}
QList<QString> DoricViewNode::getIdList() {
QList<QString> ids;
DoricViewNode *viewNode = this;
do {
ids.append(viewNode->mId);
viewNode = viewNode->mSuperNode;
} while (viewNode != nullptr);
return ids;
}
void DoricViewNode::callJSResponse(QString funcId, QVariantList args) {
QVariantList nArgs;
QList<QString> idList = getIdList();
nArgs.append(idList);
nArgs.append(funcId);
foreach (const QVariant &arg, args)
nArgs.append(arg);
return getContext()->callEntity(DoricConstant::DORIC_ENTITY_RESPONSE, nArgs);
}
void DoricViewNode::onClick() {
if (clickFunction.isEmpty()) {
return;
}
QVariantList args;
callJSResponse(clickFunction, args);
}

View File

@ -23,6 +23,10 @@ private:
QJSValue mLayoutConfig;
QList<QString> getIdList();
QString clickFunction;
public:
QString mType;
@ -58,5 +62,9 @@ public:
virtual void blend(QQuickItem *view, QString name, QJSValue prop);
virtual void blendLayoutConfig(QJSValue jsObject);
void onClick();
void callJSResponse(QString funcId, QVariantList args);
};
#endif // DORICVIEWNODE_H

View File

@ -6,5 +6,5 @@ DoricMouseAreaBridge::DoricMouseAreaBridge(QObject *parent) : QObject(parent) {}
void DoricMouseAreaBridge::onClick(qint64 pointer) {
QObject *object = (QObject *)(pointer);
DoricViewNode *viewNode = dynamic_cast<DoricViewNode *>(object);
qCritical() << viewNode;
viewNode->onClick();
}