0

我正在尝试根据从服务器返回的数据动态构建表单。<PROJECT NAME>/store在这种情况下,文件夹中没有我的商店。我有它<PROJECT NAME>/store/admin。它是这样定义的:

Ext.define('APP.store.admin.TaskOption', {
extend: 'Ext.data.Store',
autoLoad: false,
storeId: 'adminTasksOptions',
model: 'APP.model.admin.TaskOption',
sorters: [
    { property: 'order', direction: 'ASC' }
]
});

请注意storeId.

现在在我的控制器中,我在init方法中尝试了这个,但它不起作用(即:它没有调用taskOptionsLoaded 方法。

      Ext.create('APP.store.admin.TaskOption');

      this.getAdminTasksOptionStore().on({
          scope: this,
          load : this.taskOptionsLoaded
      });

另请注意,当我做了一个断点并检查时,this.getAdminTaskOptionStore返回了正确的商店。我猜这是因为我将商店放在子文件夹中?不确定,但不是重新组织文件夹结构并将它们全部放在store文件夹中(我有很多商店;大型项目),我正在尝试找到一个解决方案,以便我可以保持文件井井有条,以便下一个人使用。

所以现在我已经尝试过了,这也不起作用。这是在同一控制器中的方法中执行的。

Ext.getStore('adminTasksOptions').load(
        {'params' : {'t_id' : this.selectedTaskTemplate},
        callback: function(store, records, success) {
            this.taskOptionsLoaded(store, records, success);
        }
    },this);

当我this.taskOptionsLoaded在线断点时,它是在存储范围内,而不是控制器(this)范围内。

在自己的商店中添加加载回调storeId并在控制器范围内执行方法的最干净的方法是什么?

希望这是有道理的。

4

2 回答 2

1

如果您的控制器有一个配置stores: ['AdminTasksOptionStore'],它将生成一个名为getAdminTasksOptionStore().

storeId你的事实adminTasksOptions并不意味着 ExtJS 会在控制器中生成 getter;但是,您可以这样做Ext.data.StoreManager.lookup('adminTasksOptions')

你需要在你的控制器中有:

stores: ['TaskOption'],

然后在您的控制器中,您将拥有 getter getTaskOptionStore()

关于您的负载范围,您使用了错误的变量,它应该是:

Ext.getStore('adminTasksOptions').load({
    scope: this,
    params: {'t_id' : this.selectedTaskTemplate},
    callback: function(store, records, success) {
        this.taskOptionsLoaded(store, records, success);
    }
});
于 2012-08-11T13:14:23.140 回答
0

我认为您使用on()错误的功能。试试这个:

this.getAdminTasksOptionStore().on(
  'load', // event
  this.taskOptionsLoaded, // handler
  this // scope
);
于 2012-08-11T12:30:58.963 回答