2016-08-09 5 views
0

Я хотел бы получить мои значения из моей формы через функцию getRecord(). Это результат им в настоящее время получают из form.getRecord():Функция ExtJs getRecord() не работает

getRecord

Объект данных пуст.

Это мой контроллер:

onAddNewsClick: function(button, e, eOpts) { 

    var win = this.getNewsEdit(); 
    if(!win){ 
     win = Ext.create('widget.newsedit'); 
    } 
    this.getNewsPanel().loadRecord(Ext.create('model.news')); 
    console.log(this.getNewsPanel()); 
    this.adding = true; 
    win.show(); 
}, 

OnSaveNewsClick: function(button, e, eOpts) { 

    var form = this.getNewsPanel(); 
    console.log(form); 
    var selectedRecord = form.getRecord(); 
    console.log(selectedRecord); 
    if (this.adding) { 
     this.adding = undefined; 
    } 
} 

correspoding Модель:

Ext.define('mobile_admin.model.News', { 
extend: 'Ext.data.Model', 
alias: 'model.news', 

requires: [ 
    'Ext.data.field.Field' 
], 

fields: [ 
    { 
     name: 'title' 
    }, 
    { 
     name: 'newscontent' 
    }, 
    { 
     name: 'newsdate' 
    }, 
    { 
     name: 'status' 
    } 
]}); 

С form.getValues ​​() Я получаю все значения формы. getValues

Такое ощущение, что модель не соединяется с формой. В форме я поставил необходимое соединение имя: (http://docs.sencha.com/extjs/5.1.0/Ext.form.Basic.html#method-loadRecord)

Моя форма изделия:

items: [ 
    { 
     xtype: 'textfield', 
     fieldLabel: 'Titel', 
     name: 'title' 
    }, 
    { 
     xtype: 'datefield', 
     fieldLabel: 'Datum', 
     name: 'newsdate' 
    }, 
    { 
     xtype: 'htmleditor', 
     height: 150, 
     width: 600, 
     fieldLabel: 'Inhalt', 
     name: 'newscontent', 
    }, 
    { 
     xtype: 'textfield', 
     fieldLabel: 'Status', 
     name: 'status' 
    }, 
] 

Каждый имеет идея? Я использую ExtJs (5.1.3).

// EDIT: я узнал, что я могу установить рекорд так:

var b = form.getRecord() 
b.set(form.getValues() 

shouln't это ExtJs сделать автоматически?

ответ

2

Какое значение loadRecord действительно просто устанавливает значения. Форма больше не использует эту запись. Вот форма документов:

loadRecord: function(record) { 
    this._record = record; 
    return this.setValues(record.getData()); 
}, 

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

Я подготовил пример кода:

Ext.define('mobile_admin.model.News', { 
    extend: 'Ext.data.Model', 
    alias: 'model.news', 

    requires: [ 
     'Ext.data.field.Field' 
    ], 

    fields: [ 
     { 
      name: 'title', defaultValue : 'test' 
     }, 
     { 
      name: 'newscontent' 
     }, 
     { 
      name: 'newsdate' 
     }, 
     { 
      name: 'status' 
     } 
    ] 
}); 

Ext.define('mobile_admin.form.ViewModel', { 
    extend: 'Ext.app.ViewModel', 
    alias: 'viewmodel.formpanel', 

    links : { 
     theModel : { 
      type : 'mobile_admin.model.News', 
      create : true 
     } 
    } 
}); 

Ext.define('mobile_admin.form.formpanel', { 
    extend: 'Ext.form.Panel', 
    alias: 'widget.newsedit', 
    viewModel : 'formpanel', 

    items : [ 
     { 
      xtype: 'textfield', 
      fieldLabel: 'Titel', 
      name: 'title', 
      bind : { 
       value : '{theModel.title}' 
      } 
     }, 
     { 
      xtype: 'datefield', 
      fieldLabel: 'Datum', 
      name: 'newsdate', 
      bind : { 
       value : '{theModel.newsdate}' 
      } 
     }, 
     { 
      xtype: 'htmleditor', 
      height: 150, 
      width: 600, 
      fieldLabel: 'Inhalt', 
      name: 'newscontent', 
      bind : { 
       value : '{theModel.newscontent}' 
      } 
     }, 
     { 
      xtype: 'textfield', 
      fieldLabel: 'Status', 
      name: 'status', 
      bind : { 
       value : '{theModel.status}' 
      } 
     }], 

    buttons : [{ 
     text : 'Save', 
     handler : function(button) { 
      var vM = button.up('form').getViewModel(); 
      vM.notify(); 
      console.log(vM.get('theModel').getData()); 
     } 
    }] 
}); 

Ext.application({ 
    name : 'Fiddle', 

    launch : function() { 
     debugger; 
     var form = Ext.widget('newsedit'); 
     var window = Ext.widget('window', { 
      items : form 
     }); 
     window.show(); 
    } 
}); 
+1

Хотя ваш ответ может быть правильным, используя только ссылки на ваши ответы не хорошо на всех. Если ссылки отключены, ваш ответ становится недействительным. Ссылки предназначены для улучшения вашего ответа, а не для его замены. Я настоятельно рекомендую отредактировать ваш ответ, чтобы на самом деле ответить на вопрос в самом теле ответа. –

Смежные вопросы