Установка класса при вызове createLabel

Я использую Titanium Studio и Titanium SDK. В этом случае я разрабатываю для Android, но у меня есть установка и на OSX.

При использовании Alloy я могу указать

<Label class="header" id="someId">Week 50</Label>

а затем укажите цвета, шрифты и т. д. в файле TSS, как это

".header": {
  color: "blue"
}

Однако, когда я использую версию SDK:

var l = Ti.UI.createLabel({class:"header", text:"sometext"});

Цвет из файла TSS не подхватывается???

Что я делаю не так. Разве «класс» не является допустимым свойством? (Кажется, я не могу найти его в документах).


person Peter Andersson    schedule 13.12.2013    source источник


Ответы (2)


Стиль Alloy автоматически применяется к представлениям, созданным с помощью xml. Если вы хотите сохранить этот эффект при создании объектов внутри контроллера, вы должны использовать $.UI.create() вместо API Titanium. В вашем случае ваш код будет выглядеть так:

var l = $.UI.create('Label', {
   title: "sometext",
   classes: ["header"],
});

Дополнительную информацию см. в руководстве по динамическим стилям. Он не очень хорошо документирован, и некоторые его части были неясны для меня, когда я его читал, но это хорошая отправная точка для экспериментов с кодом и изучения поведения Alloy.

person daniula    schedule 13.12.2013
comment
Спасибо за подсказку, я пропустил вызов $.UI.create(). Однако мне удалось заставить его работать только со следующим синтаксисом: var label = $.UI.create('Label', {text:sometext, class:[header]}); Любые комментарии, почему синтаксис отличается? - person Peter Andersson; 14.12.2013
comment
Извините, я забыл о другом имуществе. Я изменил свой ответ, чтобы сделать его полностью правильным. - person daniula; 14.12.2013
comment
Отличная работа. Надеюсь, что Titanium делает что-то, чтобы упростить это. - person SSS; 05.11.2014
comment
Я не могу создать Widget, используя этот код. И, конечно же, никакой документации для этого. - person SudoPlz; 06.10.2015

Столкнулся с вашим вопросом, когда искал что-то подобное. Выбранный ответ, к сожалению, не был тем решением, которое я искал, так как я писал обычный JS и нуждался в том же. Если вы пишете обычный JS (но все еще в рамках проекта Alloy), вы можете использовать следующее решение:

var l = Alloy.UI.create("index", "Label", {
   title: "sometext",
   classes: ["header"],
});

Где "index" — это то, что Alloy генерирует из вашего app.tss файла.

person developer82    schedule 29.05.2018