我可以使用页面中的InvokeActionItem轻松共享项目,但我需要能够在listview项目中调用它。我已设法触发调用,但我无法弄清楚触发它时如何添加数据。我一直收到
的错误信息InvocationPrivate :: setQuery:不允许更改InvokeQuery对象
注意:我试图用纯粹的QML来做这个,如果有必要,我会通过c ++来做,但QML会更好。
在Page对象内部运行的代码:
actions: [
InvokeActionItem {
ActionBar.placement: ActionBarPlacement.OnBar
title: "Share"
query {
mimeType: "text/plain"
invokeActionId: "bb.action.SHARE"
}
onTriggered: {
//myTextProperty is a string variable property for the page.
data = myTextProperty;
}
}
]
我试图在其他项目中使用的代码如下,但不起作用:
Container {
gestureHandlers: [
TapHandler {
LongPressHandler {
onLongPressed: {
console.log("Longpress");
invokeQuery.setData("test");
invokeShare.trigger("bb.action.SHARE");
}
}
]
attachedObjects: [
Invocation {
id: invokeShare
query: InvokeQuery {
id:invokeQuery
mimeType: "text/plain"
}
}
]
}
有没有办法只使用QML更改调用的数据,还是需要通过c ++运行它?
答案 0 :(得分:11)
经过大量的浏览论坛和测试各种方法后,我终于找到了一个有效的方法。
在attachObjects中添加以下内容:
attachedObjects: [
Invocation {
id: invokeShare
query: InvokeQuery {
id:invokeQuery
mimeType: "text/plain"
}
onArmed: {
if (invokeQuery.data != "") {
trigger("bb.action.SHARE");
}
}
}
]
然后,只要您需要调用调用,请执行以下操作:
invokeQuery.mimeType = "text/plain"
invokeQuery.data = "mytext";
invokeQuery.updateQuery();
请注意,如果您没有检查onArmed for data,它会在创建时自动调用调用 - 对于listview,这可能导致20多个屏幕要求您在bbm上分享...;)
答案 1 :(得分:1)
您实际上可以使用InvokeActionItem,您只需调用updateQuery来重新触发invokeQuery。 当ListItemData更改时,绑定将导致值更新。
InvokeActionItem {
enabled: recordItem.ListItem.data.videoId != undefined
id: invokeAction
query{
uri: "http://www.youtube.com/watch?v=" + recordItem.ListItem.data.videoId
onQueryChanged: {
updateQuery()
}
}
}
答案 2 :(得分:1)
对于删除" InvocationPrivate :: setQuery:不允许更改InvokeQuery对象"消息我用这个:
attachedObjects: [
Invocation {
id: invoke
query {
mimeType: "text/plain"
invokeTargetId: "sys.bbm.sharehandler"
onDataChanged: {
console.log("change data")
}
}
onArmed: {
if (invoke.query.data != "") {
invoke.trigger("bb.action.SHARE");
}
}
}
]
function shareBBM(){
invoke.query.setData("TEXT TO SHARE");
invoke.query.updateQuery();
}