2012-07-03 4 views
0

в следующем примере, когда мы нажимаем кнопку, все данные формы (как KEY-VALUE) будут переданы в файл php, который будет сохранен в базе данных. Захват KEY-VALUE делается по заявлению var form = this.up('form').getForm();.Сохранение значений в базе данных - логическая ошибка

ОБНОВЛЕНИЕ 3

Ext.define ('Mycomp.model.MyClass',{ 
    extend: 'Ext.data.Model', 

    fields:['textfieldone'] 

}); 

=================================== =====================================

ОБНОВЛЕНИЕ 2

При пользователь нажимает кнопку, я показываю View, у которого есть одно текстовое поле и кнопка (как показано в следующем коде). Пользователь будет ввести несколько значений и нажмите на кнопку, и значение, введенное пользователем в текстовом поле должны быть сохранены в БД (Store имеет ссылку на путь кода PHP)

CONTROLLER

Ext.define('Mycomp.controller.MyClass',{ 
    extend: 'Ext.app.Controller', 

    stores:['MyClass'], 
    models:['MyClass'], 
    views:['MyClassView'], 
    init: function(){ 
     this.control({   
      'myclassview button[action=save]': { 
       click: this.myMethod 
      } 
     });   
     }, 
     myMethod: function(button,record) { 
       var win = button.up('window'), 
       form = win.down('form'), 
       record = form.getForm().getRecord(), 
       values = form.getForm().getValues(); 
       console.log (values); 
       console.log (record); 
       record.getRecord().set(values);   
      win.close(); 
      this.this.getMyClassStore().sync(); 
    } 
}); 

VIEW

Ext.define('Mycomp.view.user.MyClassView', { 
    extend: 'Ext.window.Window', 
    alias: 'widget.myclassview', 
    initComponent: function() { 
     this.items = [ 
      { 
       xtype: 'form', 
       items: [ 
        { 
         xtype: 'textfield', 
         name : 'textfieldone', 
         fieldLabel: 'Contact Person Name' 
        } 
       ] 
      } 
     ]; 
     this.buttons = [ 
         { 
          text: 'Save', 
          name:'save', 
          action: 'save' 
         } 
        ]; 
     this.callParent(arguments); 
    } 
}); 

STORE

Ext.define('Mycomp.store.Myclass',{ 
    extend:'Ext.data.Store', 
    model:'App.model.Myclass', 

    proxy: { 
     actionMethods : { 
      create : 'POST' 
     }, 
     type: 'ajax', 
     url : '/savetodb.php' 

    } 

}); 

=========== ================================================== ==================

ОБНОВЛЕНИЕ 1

.... this.buttons = [ 
          { 
           text: 'Save', 

           action: 'save' 
          }, ... 

МАГАЗИНА

Ext.define('Mycomp.store.Myclass',{ 
    extend:'Ext.data.Store', 
    model:'App.model.Myclass', 

    proxy: { 
     actionMethods : { 
      create : 'POST' 
     }, 
     type: 'ajax', 
     url : '/savetodb.php' 

    } 

}); 

CONTAROLLER

Firebug OUT PUT >> Он говорит, что ЗАПИСЬ НЕ УКАЗАНА. Почему это ?

undefined 

Object { textfileldone="hello", textfileldtwo="bever", more...} 

record is undefined 
[Break On This Error] 

record.set(values); 
+1

Почему этот голос проголосовали, даже без комментариев – Illep

+0

является частью 'textfieldone' вашей модели? – Izhaki

+0

'textfieldone' является частью Model, а также в MySQL db я назвал столбец как' textfieldone', а также в View i есть текстовое поле с именем 'textfieldone'. – Illep

ответ

2

Для того, чтобы формы, чтобы быть «связан» с записью вы должны создать новый экземпляр модели и вызвать form.loadRecord() - только после того, как делать, так что вы будете form.getRecord() будете работать.

Альтернативно (что было бы удобно, если бы вы использовали только для записи с новыми записями), вы можете просто создать новую запись модели при сохранении и установить ее значения.

Что-то вдоль этих линий будет создавать новую модель запись:

var iStore = this.getmyClassStore(); 
var iModel = iStore.model; 
var iNewRecord = iModel.create(); 

Вы можете выполнить:

iValues = form.getValues(); 
iNewRecord.set(iValues); 

И тогда вам нужно добавить новую запись в хранилище:

iStore.add(iNewRecord) 

Таким образом, ваш код должен выглядеть так:

myMethod: function(button, record) { 

      var win = button.up('window'), 
       form = win.down('form'), 
       values = form.getValues(), 
       store = this.this.getmyClassStore(), 
       model = store.model, 
       record = model.create(); 


       record.set(values); 
       store.add(record); 
       win.close(); 
       store.sync(); 
    } 
+0

Ну, я уже определил модель. И я включил его выше (под обновлением 3). Вы хотите, чтобы я добавил эти 3 строки кода в этот класс модели? – Illep

+0

Все, что я говорю, это то, что ваша форма не относится к образцовой записи. Где-то в вашем коде вам нужно создать правильную запись модели (модель магазина), а затем установить значения, которые вы получаете из формы. Сможете ли вы это обработать или мне нужно скопировать/вставить/изменить код, который вы опубликовали? – Izhaki

+0

Пожалуйста, не могли бы вы скопировать код вставки. Я немного застрял в этом весь день – Illep

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