Extjs MVC - 在控制器中设置商店事件

时间:2012-02-29 19:42:37

标签: model-view-controller extjs extjs4

我的应用程序中有一个要求,我需要根据从服务器端获取的值来显示UI组件(如文本字段,组合框)。确切地说,我在页面上有一个组合框,当用户更改我需要将所选值发送到服务器的值时,可以获取有关需要显示的内容的信息。不使用MVC我实现如下

  1. 当用户更改组合框中的值时,我刷新(使用加载方法)另一个商店
  2. 当我从服务器获取数据时(' datachanged' event)我读取数据并创建UI组件
  3. 现在我正在尝试使用ExtJS MVC,所以我有两个问题

    1. 如何访问与控制器关联的商店,但不一定访问视图中的任何UI组件
    2. 如何在控制器中设置商店的事件(在控制功能中),就像我们从视图中设置事件一样
    3. 代码我想设置来自商店的事件,例如&datachanged'在控制器如下 -

      this.control({
          'viewport > #content-panel' : {
              render : this.createMainTabs
           }
      });
      

2 个答案:

答案 0 :(得分:2)

除了sha的回复,我可以说你可以在你的控制器中设置你的商店事件处理程序。例如,你有一个带商店的组合框,所以你可以像这样写:

this.control({
    '#myCombo' : {
        afterrender : this.setupStoreListeners
     }
});

....

setupStoreListeners: function(combo){
    var store = combo.store;
    store.on('datachanged', //.....);
}

还有一件事,正如Sha所写,你可以随时按名称存储,但我只在需要在多个控制器之间共享商店实例时才使用它。如果我只在一个控制器中需要这个存储,我只需将它保存在这个控制器中:

setupController: function(){
   this.myStore = this.getCombo().store; // now you could use this.myStore anywhere you need

}

答案 1 :(得分:1)

要在控制器中获取商店对象只需使用this.getStore('StoreName'),默认情况下每个商店都有自己的实例,它是否绑定到您拥有的任何UI组件并不重要。

获得商店对象后,您可以使用您喜欢的任何方法订阅任何商店事件。我通常喜欢

store.on('load', {...})

此外,我不会在视图代码中更改UI中的任何内容。我会把所有这些自定义都放到控制器代码中。