2016-09-14 3 views
0

인용구 :"일부 JS 파일은 라이브러리와 유사하게 동작합니다. 즉, 중간 영역에서 직접 QML 구성 요소 인스턴스를 조작하지 않습니다. <a href="http://doc.qt.io/qt-5/qtqml-javascript-resources.html#shared-javascript-resources-libraries" rel="nofollow">Defining JavaScript Resources In QML</a>에서

일부 자바 스크립트 파일이 더 라이브러리처럼 행동 - 그들은 입력을 받아 출력을 계산하지만 직접 QML 구성 요소 인스턴스를 조작하지 도우미 기능 세트를 제공합니다.

내가 둘 다 JS 파일을 원하는 경우 :

  • 가 (인수로 전달됩니다) QML 구성 요소 인스턴스
  • 저장의 코드와 데이터의 사본을 얻을하지 않습니다 조작을 그것을 가져 오는 모든 QML 구성 요소 인스턴스에 대해?

JS 파일에 전역 변수를 넣지 않음으로써 "모든 인스턴스에 저장된 데이터가 없습니다"부분을 얻을 수있었습니다. 그러나 어떤 이상한 이유로 "코드"부분의 사본이 모든 인스턴스에 대해 저장되는 것으로 보입니다. 나는 이것이 왜 그런지는 모르지만 나는 그것을 회피 할 수 있는지, 그리고 어떤 비용을 들이는지를 알고 싶다.

+0

JS 코드는 다소 변경 될 수 있으므로 공유하는 것이 실제로 원하는 것은 아닙니다. 나는 당신이 그것을 필요로한다는 정말 좋은 증거가 나올 때까지 그것을 피할 것이다. 왜냐하면 당신은 그것과 함께 가기 위해 copy-on-write (/ assignment)가 필요할 것이기 때문에 컴포넌트들은 서로의 행동을 바꾸지 않기 때문이다. – ssube

+0

이 문장에 대한 증거를 제공해 주시겠습니까? '그러나 어떤 이상한 이유로 "코드"부분의 사본이 모든 인스턴스에도 저장되어있는 것 같습니다. " – Mitch

+0

@Mitch : 내가 링크 된 문서 페이지에는 바로 옆에 : "각 QML 구성 요소 인스턴스가이 라이브러리의 고유 한 복사본을 가지고 있기 때문에 낭비가됩니다."[...] " –

답변

2

설명서에서 인용 한 줄이 잘못되었거나 적어도 매우 불충분하다고 생각합니다. 당신은 여전히 ​​.pragma library의 JS 파일을 가질 수 있고 그 함수에 인자로 전달되는 QML 객체를 조작 할 수 있습니다. 그 문장은 아마도 previous section을 가리키고있을 것입니다.

+0

고마워, 나는 너의 방식대로 해봤고 효과가 있었다.젠장, 그 qt 의사 작가 : 나는 그들에게 그것을보고합니다. –

+2

[여기] (https://bugreports.qt.io/browse/QTWEBSITE-733)에보고되었습니다. –

1

qml 파일간에 데이터를 공유하려면 qml Singleton을 사용해보십시오.

데이터 공유의 목적으로 다음과 같은 이유로 .pragma library (@Mitch)을 사용하지 않을 것을 제안합니다.

  1. .pragma library JS는 QML 오브젝트 조작에 한정 기능을 제공한다. .pragma library js, 과 같은 간단한 qml 객체 조작 (속성 읽기/쓰기와 같은)은 qml 객체 작성/삭제를 허용하지 않습니다 (일반 비 js 라이브러리와 마찬가지로). 그것은 귀하의 응용 프로그램이 동적이 될 때 빨아 것입니다.

  2. .pragma library 단지 하나의 인스턴스를 생성하는 것은 Qt 구현에서의 최적화에 지나지 않습니다. 결코입니다. Qt가 인스턴스를 하나만 만들거나 데이터를 실제로 공유한다는 보장은 없습니다.

  3. 글쎄, .pragma library은 처음부터 데이터 공유 작업을하도록 설계되지 않았습니다. 이런 식으로하려고하지 마십시오.