从QML函数调用?

hya*_*ion 4 qml blackberry-10 blackberry-cascades

我可以使用页面中的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;                
        }
    }
]
Run Code Online (Sandbox Code Playgroud)

我尝试在其他项目中使用的代码如下,但不起作用:

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"         
       }   
    }
]
}
Run Code Online (Sandbox Code Playgroud)

有没有办法只使用QML更改调用的数据,还是需要通过c ++运行它?

hya*_*ion 11

经过大量的浏览论坛和测试各种方法后,我终于找到了一个有效的方法.

在attachObjects中添加以下内容:

attachedObjects: [      
    Invocation {
       id: invokeShare
       query: InvokeQuery {
           id:invokeQuery
           mimeType: "text/plain"                        
       }
       onArmed: {
           if (invokeQuery.data != "") {
               trigger("bb.action.SHARE");
           }
       }             
    }
]
Run Code Online (Sandbox Code Playgroud)

然后,无论您需要调用调用,请执行以下操作:

invokeQuery.mimeType = "text/plain"
invokeQuery.data = "mytext";
invokeQuery.updateQuery();
Run Code Online (Sandbox Code Playgroud)

请注意,如果您没有检查onArmed for data,它会在创建时自动调用调用 - 对于listview,这可能导致20多个屏幕要求您在bbm上分享...;)