background image

来,下次调用就会快一点。如果匹配不到组件,则方法返回

null。这意味着,如果你的逻辑

是建立在某个视图上,而且这个视图可能还未创建到页面上,你就需要在你的逻辑处理中
检查一下,要确保

getXxxx 方法返回一个正确的结果。另外,如果选择器匹配多个组件,只

有第一个匹配到的组件会被返回,因此,选择器最好对应单独的组件。最后,当你销毁一个
正在引用的组件后,调用

getXxx 获得这个组件则会返回 null,除非选择器能匹配别的组件。

application 开始时分清控制层级

当程序启动时,我们想要加载用户的电台。要完成这个需求,当然你可以使用

 onReady 方

法,然后把这部分业务逻辑放在里面,不过,

MVC 架构提供了 onLauch 方法,他会在所有

的控制器、模型和存储实例化后且视图外框绘制后立刻执行。这种方式清晰的把全局应用逻
辑和控制器具体的逻辑分开。

第一步
app/controller/Station.js
...
onLaunch: function() {
    // Use the automatically generated getter to get the store
    var stationsStore = this.getStationsStore();
    stationsStore.load({
        callback: this.onStationsLoad,
        scope: this
    });
}
...

Station store 的 load 方法在 Station 控制器的 onLauch 方法里面调用,这看起来是最好的

调用方式。正如你所见,我们配置了一个

callback 回调方法,一旦 store 加载完后就会执行

这个回调函数。

第二步
app/controller/Station.js
...
onStationsLoad: function() {
    var stationsList = this.getStationsList();
    stationsList.getSelectionModel().select(0);
}
...
在这个回调中,我们通过自动生成的

 getStationList 方法来获得 StationList 视图实例的引用,

然后选择第一个选项。这会触发一个在

 StationsList 视图触发 selectionchange 事件

第三步
app/controller/Station.js
...
init: function() {
    this.control({