2013-01-15 43 views
4

我可以使用頁面中的InvokeActionItem輕鬆地共享項目,但我需要能夠在listview項目中調用它。我已經設法觸發一個調用,但我不知道如何在觸發它時添加數據。我不斷收到從QML中的函數調用?

InvocationPrivate :: setQuery的錯誤消息:你不能改變InvokeQuery對象

注:我想這樣做純粹QML,我會通過C做++如有必要,但QML將是可取的。一個頁面對象內部工作

代碼:

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++運行它?

回答

11

經過大量的瀏覽論壇和測試各種方法後,終於找到了一個可行的方法。

添加下面你attachedObjects:

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

那麼無論你需要調用調用執行以下操作:

請注意,如果你沒有在onArmed用於做一次檢查數據會自動調用創建時的調用 - 在列表視圖的情況下,這可能會導致20多個屏幕要求您在bbm上共享...;)

+0

爲我工作 - 感謝張貼。這是記錄在哪裏? – JeffAtStepUp

+1

恐怕我不記得了,我在黑莓論壇上搜索了很多主題,更別說博客等,嘗試了很多很多變體和選項,其中沒有一個爲我工作,最終其中一個論壇帖子有這個一個片段,但我從來沒有爲該頁面添加書籤。 – hyarion

+0

我仍然得到'InvocationPrivate :: setQuery:你不能在日誌中更改InvokeQuery對象'消息,但一切正常。 – JeffAtStepUp

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() 
      } 
     } 

} 
+0

謝謝,這是非常有用的知道!在發佈原始問題時,bb10的qml更加有限,您的解決方案可能無法工作。 – hyarion

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(); 
}