2013-01-15 2 views
4

페이지에서 InvokeActionItem을 사용하여 항목을 쉽게 공유 할 수 있지만 목록보기 항목에서 호출 할 수 있어야합니다. 호출을 트리거 할 수 있었지만 트리거 할 때 데이터를 추가하는 방법을 알 수 없습니다. 나는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

나를 위해 사용 : :이 사용 메시지 "InvocationPrivate : setQuery 당신은 InvokeQuery 개체를 변경할 수 없습니다." 이 문서는 어디에 기록 되었습니까? – JeffAtStepUp

+1

나는 기억이 안납니다. 블랙 베리 포럼에서 많은 스레드를 검색했습니다. 블로그와 같은 것은 말할 것도없고, 많은 변형과 옵션을 시도했지만, 어느 것도 나를 위해 일하지 않았습니다. 결국 포럼 게시물 중 하나에 스 니펫 (snippet)이지만이 페이지를 북마크에 추가하지 않았습니다. – 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

제거 용 - 감사 게시물에 대한

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