ExtJS ComponentQuery选择器用于模型实例,或者在MVC中适当使用Models?

时间:2013-03-30 03:16:51

标签: javascript extjs

也许我正在尝试做的是反对MVC,但这里就是。

我有我在Controller上绑定功能的View事件。这些事件更新了我在Controller.init上创建的Model的实例。我希望更新Model实例以引发可以绑定到Controller上的函数的事件。

这样做的正确方法是什么?我调用了Controller.control,但我不知道要为选择器传递什么。

这是我的Controller.init:

var me = this;

me.keysModelInstance = me.getKeysModel().create();
me.control({
    'model#keys': {
        onkeyschange: me.onKeysModelInstanceChange
    }
});

这是我的模特:

Ext.define('pronghorn_ui_keyboard.model.Keys', {
    extend: 'Ext.data.Model',

    fields: [
        {
            name: 'keys',
            type: 'string'
        }
    ],

    add: function(key) {
        this.set('keys', this.get('keys') + key);
        this.fireEvent('onkeyschange');
    },

    clear: function() {
        this.set('keys', '');
        this.fireEvent('onkeyschange');
    }

});

我知道我可以通过自定义监听器获得我想要的东西,但这并不像“MVC方式”。模型是否只是为了引发事件?但这没有意义。当他们的代理获得异步更新时会引发事件的模型和商店会怎样?

1 个答案:

答案 0 :(得分:0)

在4.1x中,唯一可以监听的对象类型是组件。模型不是组件类。 Ext 4.2增加了侦听Store事件的能力。 回到4.1x,您还可以触发应用程序级事件,控制器也可以对这些事件做出反应。

来自MVC tutorial的第3部分:

init: function() {
    ...
    // We listen for the application-wide stationstart event
    this.application.on({
        stationstart: this.onStationStart,
        scope: this
    });
},

解雇:

 this.application.fireEvent('stationstart', selection[0]);