Ext.getCmp() 未定义

发布于 2024-11-03 12:49:10 字数 5261 浏览 0 评论 0原文

我正在尝试将模型的数据加载到表单中。当您使用以下处理程序点击按钮“加载模型”时,它就会起作用;

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

警报正在给我

“未定义”

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

“未捕获类型错误:对象 [object Object] 没有方法 'each'” 萤火虫。

我做错了什么?

所有代码:

     // 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
        ]
    });

I'am trying to load the data of my model into the form. It works when you hit the button "Load Model" with the following handler;

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

what I'am trying to accomplish is that the model loads directly without using the button.

loadSettingsData: function() {

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

the alert is giving me

"undefined"

When I use "this.loadRecord(settingsStorage.getAt(0));" I get

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

what am I doing wrong?

all the code:

     // 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
     }
});

and

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
        ]
    });

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

原谅我要高飞 2024-11-10 12:49:10

只是一个猜测,没有查看所有代码:当您尝试访问/分配对象时,对象可能不会被初始化。

Just a guess without viewing all of your code: the objects may not be initialized the time you try to access/assign them.

浅笑依然 2024-11-10 12:49:10

如果你调用 this.loadSettingsData(); 会有什么不同吗?调用 initComponent 之后?

Does it make a difference if you call this.loadSettingsData(); after you call initComponent?

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文