#sencha-touch #labelfield #extjs-mvc
#sencha-touch #labelfield #extjs-mvc
Вопрос:
Я хочу отобразить данные, которые я получаю из хранилища данных. Один из способов, который я пробовал, — взять текстовое поле, отключить его, а затем установить его значение с данными хранилища. Но я не думаю, что это правильное решение, поэтому я пытаюсь использовать label вместо этого, и я не понимаю, как это можно сделать. Можете ли вы, ребята, указать мне правильный способ сделать это.? Приветствуется любая помощь.
Спасибо, Мехул Маквана.
Ответ №1:
Этот пост немного устарел, но я исследовал ту же тему и в итоге использовал другой подход.
Я использую Sencha Touch версии v2.0. Я создаю ярлык и размещаю его внутри формы.Панель, как обычно делается. Затем я настроил tpl label в designer для включения полей модели. При применении значений к formpanel я также вызываю метод apply() для tpl метки. Следующий рабочий пример иллюстрирует это.
app.js:
Ext.Loader.setConfig({
enabled: true
});
Ext.application({
views: [
'MyFormPanel'
],
name: 'MyApp',
launch: function() {
Ext.create('MyApp.view.MyFormPanel', {fullscreen: true});
}
});
Вид.MyFormPanel.js
Ext.define('MyApp.view.MyFormPanel', {
extend: 'Ext.form.Panel',
alias: 'widget.myformpanel',
config: {
items: [
{
xtype: 'label',
itemId: 'myLabel',
tpl: [
'Hello, {firstName} {lastName}, please change your email below:',
''
]
},
{
xtype: 'textfield',
label: 'Email:'
}
],
listeners: [
{
fn: 'onFormpanelInitialize',
event: 'initialize'
}
]
},
onFormpanelInitialize: function(component, options) {
var person = Ext.decode("{firstName: 'John',lastName: 'Dow',email: 'jd@somewhere.com'}");
// apply value to the form
this.setValues(person);
// get the updated text for the label
var label = this.down('#myLabel');
var html = label.getTpl().apply(person);
label.setHtml(html);
}
});
Итак, идея заключается в том, чтобы сохранить шаблон label в поле label.tpl, затем получить значение runtime label с помощью метода apply() шаблона, затем задать для него текст label.
Ответ №2:
Недавно я попытался решить эту проблему, создав компонент формы «label». Я опубликовал об этом в статье блога, которую я написал на Sencha / PhoneGap. Вот код:
Ext.form.LabelField = function(config){
Ext.form.LabelField.superclass.constructor.call(this, config);
};
Ext.extend(Ext.form.LabelField, Ext.form.Field, {
isField: true,
value: '',
renderSelectors: {fieldEl: '.x-form-labelfield'},
renderTpl: [
'<tpl if="label">',
'<div class="x-form-label"><span>{label}</span></div>',
'</tpl>',
'<div class="x-form-label x-form-labelfield" style="width:70%; text-align:right"><span>{value}</span></div>',
],
setValue:function(val) {
this.value = val;
if(this.rendered){
this.fieldEl.update('<span>' val '</span>');
}
return this;
},
});
Ext.reg('labelfield', Ext.form.LabelField);
Дайте мне знать, если это поможет.
Комментарии:
1. отлично. Если вы можете мне немного больше помочь, как я могу связать значение с данными хранилища. ?
2. Оно должно действовать как обычное поле, вам нужно будет добавить к нему свойство name и создать FormPanel с данными из объекта. В итоге я использовал его по-другому, так что вам, возможно, придется поэкспериментировать.
Ответ №3:
Спасибо, mistagrooves. Это было именно то, что я искал. Я рекомендую удалить класс x-form-label и использовать эти стили:
.x-form-labelfield {
-webkit-box-flex: 1;
box-flex: 1;
width: 100%;
position: relative;
-webkit-border-radius: 0;
border-radius: 0;
padding: .4em;
border: 0;
min-height: 2.5em;
display: block;
background: white none;
-webkit-appearance: none;
}
Комментарии:
1. есть ли какая-либо конкретная причина для изменения стиля. ?