2012-01-19 9 views
0

(Извините заранее, если пост долго, я просто добавить весь код, который вовлечен в проблему, то я думаю, что может быть проще, чтобы получить ответ)Extjs 4 updateRecord ошибка

Здравствуйте , Я сталкиваюсь с проблемой, когда пытаюсь обновить хранилище в extjs 4.

Чтобы создать резервную копию, я создаю общую сетку, в которой вы можете отправить нужные столбцы, а также поля в окне для добавления новых рядов в сетку, то это общая сетка:

Ext.define('masterDataGridControls', { 
     extend : 'Ext.grid.Panel', 

     id : 'panelWin', 
     windowItems : null, 
     addWin : null, 

     initComponent : function() { 
      var me = this; 

      Ext.applyIf(me, { 
         dockedItems : [{ 
          xtype : 'toolbar', 
          dock : 'top', 
          items : [{ 
             xtype : 'button', 
             id : 'btn_delete', 
             iconCls : 'deleteIcon', 
             tooltip : 'Delete row or group', 
             handler : function() { 
              var selection = me.getView() 
                .getSelectionModel() 
                .getSelection()[0]; 
              if (selection) { 
               store.remove(selection); 
              } 
             } 
            }, { 
             xtype : 'button', 
             id : 'btn_add', 
             iconCls : 'addIcon', 
             tooltip : 'Add row or group', 
             handler : me.addToList 
            }] 
         }] 
        }); 

      me.callParent(arguments); 
     }, 

     getAddWindow : function() { 
      if (!this.addWin) { 
       this.addWin = new windowPop({ 
          formItems : this.windowItems, 
          idParent : this.config.id, 
          record : this.store.model.prototype 
         }); 
      } 
      return this.addWin; 
     }, 

     addToList : function() { 
      var addWindow = this.findParentByType().findParentByType() 
        .getAddWindow();; 
      addWindow.show(); 
     } 
    }); 

И у меня есть класс windowPop, который является тот, кто получает поля, отображать их и сохранить данные:

Ext.define("windowPop", { 
extend : "Ext.window.Window", 
formPanel : null, 
formItems : null, 
record : null, 
idParent : null, 

initComponent : function() { 
    var me = this; 

    me.formPanel = new Ext.form.Panel({ 
       items : this.formItems, 
       layout: 'anchor' 
      }); 

    Ext.applyIf(me, { 
       resizable : false, 
       closable : false, 
       width : 300, 
       minWidth : 300, 
       minHeight : 200, 
       y : 150, 
       layout : 'fit', 
       plain : true, 
       modal : true, 
       items : [me.formPanel], 
       buttons : [{ 
          text : "i_Save", 
          handler : function() { 
           console.info(me.record); 
           me.formPanel.getForm().updateRecord(me.record); 
           Ext.getCmp(me.idParent).fireEvent("winSave",me.record); 
           me.formPanel.getForm().reset(); 
           me.hide(); 
          } 
         }, { 
          text : 'i_Cancel', 
          handler : function() { 
          me.formPanel.getForm().reset(); 
           me.hide(); 
          } 
         }] 
      }); 
    me.callParent(arguments); 
} 
}); 

И у меня определенной сетки, где я определяю данные. модель и сейчас я использую фиксированный магазин, но в дальнейшем будет заменить один я получаю от сервера:

Ext.define('userKeys', { 
     extend : 'Ext.data.Model', 
     fields : [{ 
        name : 'text', 
        type : 'string' 
       }, { 
        name : 'description', 
        type : 'string' 
       }, { 
        name : 'group', 
        type : 'string' 
       }] 
    }); 

var store = Ext.create('Ext.data.Store', { 
     model: 'userKeys', 
     data : [{ 
        text : "que mamera", 
        description : "asdfasdf", 
        group : 'homework' 
       }, { 
        text : "book report", 
        description : 'hola', 
        group : 'homework' 
       }, { 
        text : "alegebra", 
        description : "haha", 
        group : 'homework' 
       }, { 
        text : "buy lottery tickets", 
        description : "kajsdf", 
        group : 'homework' 
       }] 

    }); 


Ext.define('ConfigInterfacesUserKeys', { 
     extend : 'masterDataGridControls', 

     initComponent : function() { 
      var me = this; 

      me.columns = [{ 
         id : 'cl_input', 
         header : 'i_Text', 
         dataIndex : 'text', 
         width : 220 
        }, { 
         header : 'i_Description', 
         dataIndex : 'description', 
         width : 130 
        }, { 
         header : 'i_group', 
         dataIndex : 'group', 
         width : 130 
        }]; 

      me.windowItems = [{ 
         xtype : 'textfield', 
         id : 'txt_sendTime', 
         fieldLabel : 'text', 
         margin : '5 0 0 5', 
         style : 'font-weight:bold', 
         labelWidth : 120, 
         name : 'text' 
        }, { 
         xtype : 'textfield', 
         id : 'txt_waitTime', 
         fieldLabel : 'description', 
         margin : '5 0 0 5', 
         style : 'font-weight:bold', 
         labelWidth : 120, 
         name : 'description' 
        }, { 
         xtype : 'textfield', 
         id : 'txt_group', 
         fieldLabel : 'group', 
         margin : '5 0 0 5', 
         style : 'font-weight:bold', 
         labelWidth : 120, 
         name : 'group' 
        }]; 

      me.store = store; 

      me.callParent(arguments); 
     } 
    }) 

Проблема

Когда я пытаюсь сохранить поля, как вы видите в windowPop класс Im делает это:

me.formPanel.getForm().updateRecord(me.record); 

Но я получаю следующую ошибку:

this[this.persistenceProperty] is undefined 

Я разыскал ошибку, и я считают, что все начинается, когда в функции updateRecord попытаться установить объект в хранилище:

updateRecord: function(record) { 
    var fields = record.fields, 
    values = this.getFieldValues(), 
    name, 
    obj = {}; 
    fields.each(function(f) { 
     name = f.name; 
     if (name in values) { 
      obj[name] = values[name]; 
     } 
    }); 
    record.beginEdit(); 
    **record.set(obj);** 
    record.endEdit(); 
    return this; 
} 

я не знаю, если это что-то не так, когда я отправить модель в окне из общей сетки, я послал это так:

record : this.store.model.prototype 

Тогда я не уверен, если это из-за модели, которую я отправляю не очень хорошо.

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

Благодаря

ответ

0

I don't know if it is something wrong when I send the model to the window from the general grid

Я считаю, что это. Вы отправляете не пустой экземпляр (который должен быть отправлен), а прототип класса. Попытайтесь послать:

record : new this.store.model() 
+0

Это сработало :), тогда проблема была в том, что я отправлял уже заполняющий объект, то, что я должен был отправить, но пустая ... спасибо большое ...) ... –