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

У меня возникли проблемы с импортом библиотеки i18n, включенной в Ubuntu.Components 0.1 для использования в JS-файле. Сначала я столкнулся с вопросом / проблемой, взломав основное приложение «Clock» Ubuntu Touch, но я смог воспроизвести поведение с помощью упрощенного фрагмента кода, поэтому я вставил это ниже.

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

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

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

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

[d6 ] ConverterUtils.js

.pragma library
.import Ubuntu.Components 0.1 as Foo

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

Примечания

1) « CurrencyConverter / ConverterUtils.js: 5: TypeError: свойство 'tr' объекта [object Object] является а не функция "(насколько мне известно):« Загружайте только одну версию этой библиотеки и делитесь ею между всеми местами, в которые этот JS включен в это приложение. http: // qt- project.org/doc/qt-4.8/qdeclarativejavascript.html

2) W Я удаляю строку «.pragma library», как ссылка выше подсказок, JS-файл наследует импорт файла QML, из которого он используется. Поэтому, когда я удаляю эту строку, я могу получить доступ к i18n. Это имеет смысл. Однако, поскольку приложение «Часы», где я впервые столкнулся с этой проблемой, использует директиву .pragma (якобы по соображениям производительности), я не думаю, что удаление является хорошим решением.

3) Я нашел Синтаксис «.import» для импорта библиотек QML в JS-файл здесь: http://qt-project.org/doc/qt-4.8/qdeclarativejavascript.html Возможно, я неправильно интерпретировал его, но он выглядит прямо на меня.

4) Интересно отметить, что при редактировании этого кода с помощью UbuntuSDK (QtCreator), набрав «Foo». вызывает «i18n» как предложение автозаполнения. Ввод «Foo.i18n». выведет «tr ()» в качестве одного из предложений автозаполнения. Таким образом, похоже, UbuntuSDK распознает мое «Foo» Qualifier / namespace. Или, может быть, автозаполнение не учитывает импортированные библиотеки. Просто подумал, что это интересно.

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

1
задан 7 June 2014 в 04:02

0 ответов

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

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