4

ページでInvokeActionItemを使用してアイテムを簡単に共有できますが、リストビューアイテムで呼び出すことができる必要があります。なんとか呼び出しをトリガーできましたが、トリガー時にデータを追加する方法がわかりません。次のエラーメッセージが表示され続けます

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 ++で実行する必要がありますか?

4

3 に答える 3

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でデータのチェックを行わないと、作成時に自動的に呼び出しが呼び出されることに注意してください。リストビューの場合、これにより、bbmで共有するように求める20以上の画面が表示される可能性があります...;)

于 2013-01-16T16:08:30.253 に答える
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()
            }
      }

}
于 2013-10-09T02:42:04.747 に答える
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();
}
于 2014-04-21T16:23:31.990 に答える