2011-04-24 34 views
2

我試圖將我的模型的數據加載到表單中。當你用下面的處理程序按下按鈕"Load Model"時,它會起作用;Ext.getCmp()未定義

   handler: function() { 
        var settingsForm = Ext.getCmp('settingsForm'); 
        settingsForm.loadRecord(settingsStorage.getAt(0)); 
       } 

我試圖完成的是該模型直接加載而不使用按鈕。

loadSettingsData: function() { 

    var settingsForm = Ext.getCmp('settingsForm'); 
    alert(settingsForm); 
    settingsForm.loadRecord(settingsStorage.getAt(0)); 

警報是給我

"undefined"

當我使用"this.loadRecord(settingsStorage.getAt(0));"我得到

"Uncaught TypeError: Object [object Object] has no method 'each'" in firebug.

我究竟做錯了什麼?

所有代碼:

 // the sructure for every row in the file 
var UserSettings = Ext.regModel('UserSettings', { 
    fields: ['push', 'shake', 'sound'] 
}); 

// the storage 
var settingsStorage = new Ext.data.Store({ 
    proxy: new Ext.data.LocalStorageProxy({ 
    type: 'localstorage', 
     id: 'data', 
     //very important for the row update - basicaly, the row number is taken from the id field in the userSettings structure 
     proxy: { 
      idProperty: 'id', 
      type: 'localstorage' 
     } 
    }), 
    //uses the userSettings structure 
    model: 'UserSettings', 
    autoLoad: true, 
    autoSave: true 
}); 

//sync with local file 
settingsStorage.sync(); 
//what to do when file is read, right now the only thing important to us us the scope 
settingsStorage.read({ 
    scope: this, 
    callback: function (records) { 
     //code to load the first record 
    } 
}); 

app.views.Settings = Ext.extend(Ext.form.FormPanel, { 
title: "Instellingen", 
iconCls: "settings", 
id: "settingsForm", 
standardSubmit : false, 
items: [{ 
     xtype: 'fieldset', 
     title: 'Instellingen push berichten', 
     id: 'lol', 
     items: [ 
      { 
       xtype: 'togglefield', 
       name: 'push', 
       label: 'Aan/uit', 
       value : 1 
      }, 
      { 
       xtype: 'togglefield', 
       name: 'shake', 
       label: 'Trillen', 
       value : 1 
      }, 
      { 
       xtype: 'togglefield', 
       name: 'sound', 
       label: 'Geluid', 
       value : 1 
      }  
     ] 
    } 
], 
dockedItems: [ 
    { 
     xtype: 'toolbar', 
     dock: 'bottom', 
     items: [ 
      { 
       text: 'Load Model', 
       ui: 'round', 
       handler: function() { 
        var settingsForm = Ext.getCmp('settingsForm'); 
        settingsForm.loadRecord(settingsStorage.getAt(0)); 
       } 
      }, 
      {xtype: 'spacer'}, 
      { 
       text: 'Reset', 
       handler: function() { 
        var settingsForm = Ext.getCmp('settingsForm'); 
        settingsForm.reset(); 
        alert(settingsForm.id); 
       } 
      }, 
      { 
       text: 'Save', 
       ui: 'confirm', 
       handler: function() { 
        var settingsForm = Ext.getCmp('settingsForm'); 
        settingsForm.customSubmit(settingsForm.getValues()); 
       } 
      } 
     ] 
    } 
], 
initComponent: function() { 

    this.loadSettingsData(); 

    // reload the component 
    app.views.Settings.superclass.initComponent.apply(this, arguments); 

}, 
loadSettingsData: function() { 

    var settingsForm = Ext.getCmp('settingsForm'); 
    alert(settingsForm); 
    settingsForm.loadRecord(settingsStorage.getAt(0)); 

    if(settingsStorage.getAt(0)) { 
     //this.loadRecord(settingsStorage.getAt(0)); 
    } 

}, 
customSubmit: function(data) { 

    //read data 
    settingsStorage.read(); 

    //get the first item 
    var item = settingsStorage.getAt(0); 

    //if not exists, build the first item (this area needs to be replaced with a function that construct a whole settings file 
    if (!item) { 

     alert('create new item'); 

     //constract item's structure 
     var item = new UserSettings({ 
      push: data.push, shake: data.shake, sound: data.sound 
     }); 

     //add new item to file 
     settingsStorage.add(item); 

     //sync item 
     settingsStorage.sync(); 

    } 

    //set value in item 
    item.set('push', data.push); 
    item.set('shake', data.shake); 
    item.set('sound', data.sound); 

    //sync items to file 
    settingsStorage.sync(); 
    }, 
}); 
    //set the variable 
Ext.reg('settings', app.views.Settings); 
edit// viewport: 

Ext.apply(app.views, { 
     contact: new app.views.Contact(), 
     viewItem: new app.views.ViewItem(), 
     settings: new app.views.Settings(), 
     rsslist: new app.views.RssList() 
    }); 
    Ext.apply(this, { 
     tabBar: { 
       dock: 'bottom', 
       layout: { 
        pack: 'center' 
       }, 
     }, 
     items: [ 
      app.views.rsslist, 
      app.views.settings, 
      app.views.contact 
     ] 
    }); 

回答

4

只是一個猜測而不查看所有代碼:對象可能無法初始化您嘗試訪問的時間/分配它們。

+0

感謝您的回答,我已經研究過這一點,並改變了一些東西,但無法得到它的工作。 這是我的視口,我稱之爲視圖;編輯//查看開始信息 – Melvin 2011-04-24 18:44:24

+0

你的代碼是否在「Ext.setup({onReady:function(){...」語句中? – Nicodemuz 2011-04-25 01:39:55

+0

現在就開始工作了,我把代碼放在一個名爲active的監聽器中,listeners:active:函數(東西) – Melvin 2011-04-28 19:23:27

0

如果你調用this.loadSettingsData();你調用initComponent之後?