2015-11-24 3 views
0

У меня есть приложение, которое должно быть многоязычным.
Перевод выполнен с сервера и основан на пользователе, использующем приложение.
Мой текущий подход заключается в создании моего собственного поля для всего, что используется в приложении, и во время инициализации я изменяю то, что он говорит переведенному тексту, на основе заданного кода.
Например, в одной кнопки, я создаю свою собственную кнопку, как это:Добавить логику в Ext.Component initialize Sencha Touch

Ext.define('myapp.view.shared.MyButton', { 
    extend: 'Ext.Button', 
    xtype: 'myappbutton', 

    initialize: function() { 
     this.callParent(); 
     this.setText(myapp.util.Helper.getTranslation(this.textCode, this.defaultText)); 
    } 
}) 

Затем меняю де настройки кнопки по умолчанию на что-то вроде этого, где я просто изменить xtype, удалить текст, а также добавить textCode и defaultText.

{ 
    xtype: 'myappbutton', 
    textCode: 'back', 
    defaultText: 'Back', 
    ... 
} 

Затем я определяю текст и текст по умолчанию. Метод getTranslation проверяет в локальном хранилище, чтобы получить перевод для кода, и вернуть найденный текст или отправленный по умолчанию текст.

¡Вот вопрос!
Поскольку у меня есть 12 различных компонентов (до сих пор), и каждый компонент каким-то образом расширяется из Ext.Component, я хочу добавить свой код в инициализацию Ext.Component, чтобы применить этот фрагмент кода, избегая этого дерьма создания настраиваемого элемента управления для каждого отдельного элемента управления, который мне нужен для перевода.
Возможно ли это?

TIA!
Milton.-

+0

Ваш вопрос отсутствует знак вопроса. Но я вижу проблему наследования. Вы не можете быть уверены, какие функции доступны и/или необходимы для того, чтобы определенный компонент работал многоязычным. Вы оценили, могут ли переопределения быть лучше, чем «пользовательские компоненты»? – Alexander

+0

Привет, Александр! Спасибо за ваш ответ. Я добавил вопросительный знак. Что касается того, что вы упоминаете, Ext.Component имеет событие initialize, поэтому я хочу получить эту функцию события и выполнить мой конец. Я в основном такой же, что и в каждом компоненте, но хочу сделать это только один раз. Имеют смысл? – Milton

ответ

1

Я думаю, вы всегда можете попробовать что-то вдоль линий

Ext.define('MyApp.override.Internationalization',{ 
    override:'Ext.Component', 
    initialize: function() { 
     me.callOverridden(arguments); 
     // Your code here. 
    } 
}); 
+0

Выглядит неплохо! У меня больше нет элементов управления для создания, но попробую позже, так что я могу удалить настраиваемые элементы управления для удобства обслуживания. Спасибо, Александр! – Milton

+0

Привет, Александр! Я пытался и не работал. Знаете ли вы, влияет ли это изменение на все компоненты, без необходимости продлевать его? Я имею в виду, что нет необходимости создавать компоненты, которые простираются от интернационализации. Имеют смысл? – Milton

+0

Вы «переопределяете» 'Ext.Component', что означает, что исходный' Ext.Component' имеет измененную функцию 'initialize', которая вызывает исходную функцию' initialize' в 'this.callOverridden'. – Alexander