使用"事件"输出为变量

时间:2012-05-19 07:05:59

标签: javascript variables object extjs extjs4

操作复选框值时遇到问题。复选框上的“更改”事件返回一个对象,在我的情况下:

{"val1":"member","val2":"book","val3":"journal","val4":"new_member","val5":"cds"}

上述对象需要进行转换,以便搜索引擎像以下一样使用它:

{ member,book,journal,new_member,cds}

我用以下代码块完成了这个:

var formcheckbox = this.getFormcheckbox();
formcheckbox.on('change', function(checkbox, value){

                var arr=[];

                for (var i in value) {
                    arr.push(value[i])
                };

                var wrd = new Array(arr);
                    var joinwrd = wrd.join(",");
                        var filter = '{' + joinwrd + '}';

                        //console.log(filter);

                //Ext.Msg.alert('Output', '{' + joinwrd + '}');

                });

问题是我想要“更改”事件的输出(“var filter”产生:{member,book,journal,new_member,cds})在其他地方使用它。我试图将整个事件变成一个变量(var output =“change event”),但它不起作用。

也许这是一个愚蠢的问题,但我是一个新手,我需要一些帮助。

提前谢谢你,

汤姆

2 个答案:

答案 0 :(得分:3)

只需将filter传递给将使用它的函数。如果你想要发生一些事情,你必须从change处理程序内部调用它:

formcheckbox.on('change', function(cb, value){
    //...
    var filter = "{" + arr.join(",") + "}";
    useFilter(filter);
});


function useFilter(filter){
    // use the `filter` var here
}

答案 1 :(得分:2)

您可以将filter设为全局变量,并在需要的地方使用它。

// global variable for the search filter
var filter = null;

var formcheckbox = this.getFormcheckbox();
formcheckbox.on('change', function(checkbox, value){
    var arr = [],
    i,
    max;

    // the order of the keys isn't guaranteed to be the same in a for(... in ...) loop
    // if the order matters (as it looks like) better get them one by one by there names
    for (i = 0, max = 5; i <= max; i++) {
        arr.push(value["val" + i]);
    }

    // save the value in a global variable
    filter = "{" + arr.join(",") + "}";

    console.log(filter);
});