2016-08-09 47 views
0

我想通過getRecord()函數從表單中獲取我的值。 這是當前從form.getRecord()得到的結果IM:表單的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; 
    } 
} 

把對應的型號:

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)。

//編輯: 我發現我可以設置這樣的記錄:

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

雖然你的答案可能只使用鏈接在你的答案是正確的是不好的。如果鏈接脫機,你的回答就會失效。鏈接是爲了改善你的答案而不是取代它。我強烈建議編輯你的答案,在答案主體中自己回答問題。 –