Javascript 在Sencha touch的切换字段中设置值

Javascript 在Sencha touch的切换字段中设置值,javascript,extjs,sencha-touch,Javascript,Extjs,Sencha Touch,我正在尝试保存sencha中切换字段的值并将该值发送到服务器,现在我正在侦听事件,但它不起作用 我的代码是: onHeaderCompleteDelivery: function (button, oldValue, newValue) { console.log('change fired'); if(oldValue == 0 && newValue == 1){ console.log(oldValue); this.g

我正在尝试保存sencha中切换字段的值并将该值发送到服务器,现在我正在侦听事件,但它不起作用

我的代码是:

   onHeaderCompleteDelivery: function (button, oldValue, newValue) {
    console.log('change fired');
    if(oldValue == 0 && newValue == 1){
        console.log(oldValue);
        this.getCmp('headerCompleteDelivery').setValue(oldValue);
    }
    else {
        console.log(oldValue);
        this.getCmp('headerCompleteDelivery').setValue(oldValue);
    }
},
我做错了什么


谢谢

我不太明白您想要完成什么,但看看代码,if和else分支都在执行完全相同的代码,这可能是问题所在


此外,在change事件中,oldValue和newValue参数似乎是颠倒的:newValue参数位于oldValue参数之前(请参见)。

很难判断您在做什么,正如Ricardo所提到的:

  • 它看起来像您正在收听的togglefield的更改事件
  • 但它似乎不是标准事件,因为newValue将是第二个参数,oldValue将是第三个参数
  • 您可以使用button来命名触发组件,这可能表示您正在侦听一个按钮,但该按钮没有togglefield的值
这对你毫无帮助


如果这确实是togglefield,请重写您的代码,以保持简单

  • 我已将您将要设置的值更改为0和1,以显示此时将设置的值
  • 我删除了第二个if子句,因为它显然是相反的值
  • 我解释了每个值的作用,因为新值在参数中的错误位置
  • 如果在这里没有其他意义的话。我加了一个简短的表格


你应该采取不同的方法

  • 使用表格
  • 将toggelfield放入表单中,并向该字段添加名称
  • 点击submit按钮后,从表单获取值(form.getValues())
  • 在这些值中,您将拥有togglefield的当前值
这里有一个例子:

看法

控制器

Ext.define('App.controller.Main', {
    extend: 'Ext.app.Controller',

    config: {
        refs: {
            submitBtn: '#btnSubmit',
        },
        control: {
            submitBtn: { tap: 'onSubmitBtnTap'},
        }
    },

    onSubmitBtnTap: function (btn) {
        var form = btn.up('.form'),
            values = form.getValues();

        // here you will get an Object with
        {
            name: 'Value of name field',
            password: 'Value of password field',
            isActiveToggle: true // <== this is the value you want to send
        }

        this.sendDataToServer(values.isActiveToggle); // your Ajax call with toggleValue
    }
});
Ext.define('App.controller.Main'{
扩展:“Ext.app.Controller”,
配置:{
参考文献:{
提交:“#b提交”,
},
控制:{
submitBtn:{tap:'onSubmitBtnTap'},
}
},
onSubmitBtnTap:功能(btn){
var form=btn.up('.form'),
values=form.getValues();
//在这里,您将获得一个对象
{
名称:“名称字段的值”,
密码:“密码字段的值”,

isActiveToggle:true//是的,可能有点奇怪,我是sencha touch的新手,我的需要是“注册”togglefield新值并将该值发送到后端。这两种情况对我都不起作用,第一种情况发送“未定义”,第二种情况发送模棱两可的消息“”最好的方法是什么?谢谢Proto BassiI我不知道我做错了。但是我无法获取对象(例如),使用getValues()我有一个错误…:-(您可以添加console.dir(表单)和console.dir(值)吗消息是:“无法读取未定义”的属性“getValues”和我的代码:
var field=toggle.up('headerCompleteDelivery'),values=field.getValues();console.dir(字段);this.getCmp('headerCompleteDelivery')。setValue(值);console.dir(values);
所以字段是一个表单?正如您所看到的,字段未定义。切换似乎不在HeaderCompletedDelivery中。
Ext.define('App.view.Main', {
    extend: 'Ext.Container',
    xtype: 'main',

    config: {

        items: [
            {
                xtype: 'form',
                items: [
                    {
                        xtype: 'textfield',
                        name: 'name',
                    },
                    {
                        xtype: 'passwordfield',
                        name: 'password'
                    },
                    {
                        xtype: 'togglefield',
                        name: 'isActiveToggle',
                        label: 'Test Toggle Field'
                    },
                    {
                        xtype: 'button',
                        itemId: 'btnSubmit',
                        text: 'Submit'
                    }
                ]
            }
        ]
    }
});
Ext.define('App.controller.Main', {
    extend: 'Ext.app.Controller',

    config: {
        refs: {
            submitBtn: '#btnSubmit',
        },
        control: {
            submitBtn: { tap: 'onSubmitBtnTap'},
        }
    },

    onSubmitBtnTap: function (btn) {
        var form = btn.up('.form'),
            values = form.getValues();

        // here you will get an Object with
        {
            name: 'Value of name field',
            password: 'Value of password field',
            isActiveToggle: true // <== this is the value you want to send
        }

        this.sendDataToServer(values.isActiveToggle); // your Ajax call with toggleValue
    }
});