2014-11-24 3 views
2

Javascript 리소스에 어떻게 바인딩합니까?가져온 Javascript 속성에 바인딩

저는 QML을 처음 접했을 뿐이므로이 방법을 잘못 생각한 것 같습니다.하지만 아래 예제에서 "World"라고 말하기를 원합니다.

main.qml

import QtQuick 2.0 
import QtQuick.Controls 1.0 
import "model.js" as Model 


Button { 
    id: button 
    text: Model.text 

    onClicked: { 
     Model.text = "World"; 
     print("Model.text is:", Model.text) 
     print("button.text is:", button.text) 
     // Model.text is "World" 
     // button.text is "Hello" 
     // They should both be "World" 
    } 
} 

model.js

var text = "Hello"; 

나는 또한 Qt.binding를 사용했지만, 그 차이를 만들지 않았다.

main.qml 내가 찾고 그 결과는 창 높이, 색상 및 이미지 경로 등의 전용 자바 스크립트 자원의 속성을 가지고 항목 중하는 것입니다

import QtQuick 2.0 
import QtQuick.Controls 1.0 
import "model.js" as Model 


Button {  
    onClicked: { 
     Model.text = "World"; 
    } 

    Component.onCompleted: { 
     text = Qt.binding(function() { return Model.text }) 
    } 
} 

그것들을 사용하여 자원에 대한 모든 변경 사항과 동기화 상태를 유지합니다.

편집 관련 질문을 찾을 수

: declare global property in QML for other QML files

+0

Javascript 속성이 업데이트 될 때 버튼의 텍스트를 업데이트하고 싶습니다. 업데이트 된 예제를 참조하십시오. –

답변

4

일반적으로, 당신은 순수 자바 스크립트 모듈에서 변수에 QML 속성을 바인딩 할 수 없습니다. 제 조언은 가벼운 QML 대안 - QtObject을 사용하는 것입니다. 다음과 같이 사용자 정의 속성 및 신호 집합을 추가 할 수 있습니다.

QtObject { 
    id: mySettings 
    property string iconPath: "./icon.png" 
} 

이 속성은 나중에 원하는대로 정확하게 바인딩 할 수 있습니다.

+0

나는 이것을 고려하고 있었고 내 경우에는 잘 작동 할 수있다. 자바 스크립트 영역에 보관하고 싶다면 아마도 mySettings = Qt.createQmlObject ("QtQuick 2.0; QtObject {}"가져 오기)와 거기에서 속성을 첨부 할 수 있습니까? –

+1

몇 가지 실험과 생각을 한 후,이 하나가 승자입니다. @QtRoS에 감사드립니다. –