2013-03-30 22 views
0

也許我想要做的是反對MVC,但這裏。ExtJS模型實例的ComponentQuery選擇器,或者MVC中模型的適當用法是什麼?

我有查看事件,我已經綁定到我的控制器上的功能。這些事件更新了我在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方式」。模型不是爲了引發事件嗎?儘管如此,這沒有任何意義。當代理獲得異步更新時引發事件的模型和商店怎麼樣?

回答

0

在4.1x中,唯一可以監聽的對象類型是組件。模型不是組件類。 Ext 4.2增加了監聽商店事件的功能。 回到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]); 
+0

我可以調用me.keysModelInstance.on設置一個監聽器與Controller.this作爲控制器內範圍。在裏面。我想這實現了同樣的事情,而不是使用ComponentQuery。 – alyssackwan

+0

看起來像一個獨特的要求:) – dbrin

相關問題