如何更改"数据"来自商店监听器的viewmodel中的值?

时间:2018-02-06 11:59:09

标签: extjs listener bind viewmodel

我在“选择字段”中绑定了一个地方持有人。像这样:

{
xtype           : 'selectfield',
bind        : {
    store       : '{chapters}',
    placeHolder : '{chapterPlaceHolder}'
    }
}

现在我想更改" chapterPlaceHolder'的数据。在来自商店监听器的ViewModel中:

Ext.define('SomeViewModel', {
extend      : 'Ext.app.ViewModel',

data        : {
    chapterPlaceHolder  : null
},
stores      : {
    chapters        : {
        model   : 'model.SiteChapter',
        listeners: {
            datachanged: function() { how to change the 'chapterPlaceHolder' in data? }
        }
    }
}
});

希望我很清楚......

2 个答案:

答案 0 :(得分:1)

您需要在viewmodel事件中获得datachanged。获得viewmodel后,您可以使用getset更改视图模型中任何字段的值。

FIDDLE 中,我使用您的代码创建了一个演示,并将我的努力放在相同的代码中。我希望这有助于/指导您实现您的要求。

CODE SNIPPET

Ext.application({
    name: 'Fiddle',

    launch: function () {
        Ext.define('SomeViewModel', {
            extend: 'Ext.app.ViewModel',
            alias: "viewmodel.demoVM",
            data: {
                chapterPlaceHolder: null
            },
            stores: {
                chapters: {
                    listeners: {
                        datachanged: function () {
                            var vm = Ext.ComponentQuery.query('#myform')[0].getViewModel();
                            vm.set('chapterPlaceHolder', 'data changed event called......');
                            //how to change the 'chapterPlaceHolder' in data ?
                        }
                    }
                }
            }
        });
        Ext.create('Ext.form.Panel', {
            itemId: 'myform',
            fullscreen: true,
            viewModel: {
                type: 'demoVM'
            },
            defaults: {
                margin: 20
            },
            items: [{
                xtype: 'fieldset',
                items: [{
                    xtype: 'selectfield',
                    autoSelect: false,
                    bind: {
                        store: '{chapters}',
                        placeHolder: '{chapterPlaceHolder}'
                    }
                }]
            }, {
                xtype: 'button',
                text: 'Load Data In store ',
                handler: function (btn) {
                    var vm = btn.up('formpanel').getViewModel();
                    vm.get('chapters').loadData([{
                        text: 'First Option',
                        value: 'first'
                    }, {
                        text: 'Second Option',
                        value: 'second'
                    }, {
                        text: 'Third Option',
                        value: 'third'
                    }]);

                    //You can also set like below
                    //vm.set('chapterPlaceHolder', 'Data loaded on button click......');
                }
            }]
        });
    }
});

答案 1 :(得分:1)