Неспособный к доступу i18n в файле приложения QML JS

Я испытываю затруднения при импорте i18n библиотеки, включенной в Ubuntu. Компоненты 0.1 для использования в файле JS. Я первоначально столкнулся со своим вопросом/проблемой при взламывании на 'Часах' Сенсорного базового приложения Ubuntu, но я смог воспроизвести поведение с помощью очень упрощенного фрагмента кода, таким образом, я вставил это ниже.

Когда я выполняю этот код своих 14,04 рабочих столов с помощью UbuntuSDK, я получаю сообщение об ошибке:

CurrencyConverter/ConverterUtils.js:5: TypeError: Свойство 'TR' объекта [объектный Объект] не является функцией

Кажется, что или я ссылаюсь на функцию с помощью неправильного синтаксиса, или существует что-то не так с моим синтаксисом импорта.

CurrencyConverter.qml

import QtQuick 2.0
import Ubuntu.Components 0.1
import "ConverterUtils.js" as Utils

MainView {
    id: root
    applicationName: "CurrencyConverter"

    width: units.gu(100)
    height: units.gu(75)

    property real margins: units.gu(2)
    property real buttonWidth: units.gu(9)

    Page {
        title: Utils.getTitle()
    }
}

ConverterUtils.js

.pragma library
.import Ubuntu.Components 0.1 as Foo

function getTitle() {
    return i18n.tr("Currency Converter");
}

Примечания

1) ".pragma библиотека" строка (в меру моего понимания) там для высказывания: "только загрузите одну версию этой библиотеки и совместно используйте ее между всеми местами, этот JS включен в это приложение. http://qt-project.org/doc/qt-4.8/qdeclarativejavascript.html

2) Когда я удаляю ".pragma библиотека" строка, поскольку ссылка выше подсказок, файл JS наследовал импорт файла QML, это используется от. Таким образом, когда я удаляю ту строку, я могу получить доступ к i18n. Это имеет смысл. Однако начиная с приложения 'для Часов', где я первоначально встретился с этой проблемой, использует .pragma директиву (якобы по причинам производительности), я не думаю, удаляя его, хорошее решение.

3) Я нашел ".import" синтаксис для импорта библиотек QML в файл JS здесь: http://www.qt-project.org/doc/qt-5/qtqml-javascript-imports.html я, возможно, неправильно истолковал его, но это выглядит правильным мне.

4) Интересное примечание то, что при редактировании этого кода с помощью UbuntuSDK (QtCreator), вводя "Нечто". поднимает "i18n" как предложение автоматического заполнения. Ввод "Нечто i18n". поднимет "TR ()" как одно из предложений автоматического заполнения. Таким образом, кажется, что UbuntuSDK распознает мой Спецификатор/пространство имен "Нечто". Или возможно автоматическое заполнение не принимает импортированные библиотеки во внимание. Просто мысль это было интересно.

Таким образом, мой вопрос: кто-либо знает то, что вызывает это поведение? Я могу, вероятно, работать вокруг проблемы путем вызова i18n.tr () из файла QML, а не JS util библиотека, но мне любопытно знать то, что я сделал неправильно. Какие-либо предложения?

3
задан 7 June 2014 в 03:02

1 ответ

Таким образом, у меня есть частичное решение для проблемы, я видел.

После рассмотрения кода для базового приложения RSS-ридера, похоже, когда ".pragma библиотека" директива используется, i18n модуль должен быть передан в вызванной функции JavaScript. Это дает коду JavaScript способность вызвать функции с помощью переданного - в объекте.

, Например, JavaScript посмотрел бы что-то как:

function getTitle(i18n) {
    return i18n.tr("CurrencyConverter");
}

Это действительно не отвечает, "почему" из моего начального вопроса, но для любого сталкивающегося с этой проблемой, это должно быть подходящим обходным решением.

1
ответ дан 18 November 2019 в 05:42

Другие вопросы по тегам:

Похожие вопросы: