gpt4 book ai didi

javascript - 查看和存储在 Controller 初始化之前加载

转载 作者:行者123 更新时间:2023-11-30 05:52:21 25 4
gpt4 key购买 nike

我正在构建 Sencha touch 2.1 应用程序。

在我的应用程序中,我有一个全局变量,它保持对我的 Controller 类的引用。该引用用于在其中一个商店的负载上执行 Controller 功能,但是当我将其部署在慢速远程服务器上并且在该全局变量获取 Controller 对象的引用之前触发商店的负载时,问题就来了。为了在商店加载之前提供此引用,我尝试将初始化逻辑放在 Controller 的 init 方法中

init : function(){
bossController = this.getApplication().getController('Boss');
},

在 Controller 的 init 方法中,但在调用此 init 之前加载了 View 和存储,因此出现此错误:

Cannot call method 'loadMagazines' of undefined 

这是我在商店中的加载监听器:

listeners:{
load: function( me, records, successful, operation, eOpts ){
bossController.loadMagazines(this, records);
}
}

我尝试在 app.js 的 launch() 方法而不是 Controller 的 init 方法中初始化这个变量,但这也没有用。

请注意,当我将我的代码放在本地 apache 中并使用我的 chrome 浏览器访问它时,这两种方法都可以正常工作,但是当我将它放在速度较慢的远程服务器上时,它们就不起作用了。

编辑

这就是应用程序流程的发生方式 0. 所有模型、 View 、存储和 Controller 都在 app.js 中定义

  1. app.js 中的启动函数将主视图添加到视口(viewport)。

  2. 主视图创建杂志 View 并将其添加到自身。

  3. 在杂志 View 的初始化方法中,创建并加载存储。

  4. 在store的load listener中,使用了controller。

这是我的观点:

Ext.define('myshop.view.MagazinePanel', {
extend : 'Ext.Panel',
requires : [
'myshop.model.MagazinePage',
'myshop.store.MagazineStore',
'Ext.XTemplate',
'Ext.data.Store'
],
alias : 'widget.magazinepanelview',
xtype : 'magazinepanelview',
config : {
layout : 'hbox',
id : 'hc',
scrollable: 'horizontal',
directionLock : true,
masked: {
xtype: 'loadmask',
message: 'Loading'
},
inline: {
wrap: false
},
items : [{
xtype : 'panel',
html : ''
}]
},
initialize: function() {
var me = this;
var myStore = Ext.create('myshop.store.MagazineStore');
myStore.load({
callback: function(records, operation, success) {
me.setMasked(false);
},
scope: this
});
this.callParent();
}
});

这是商店:

Ext.define('myshop.store.MagazineStore',{
extend:'Ext.data.Store',
requires: [
'myshop.model.MagazinePage',
'Ext.data.proxy.JsonP'
],
config:{
storeId : 'ms',
model:'myshop.model.MagazinePage',
autoLoad :false,
pageSize: 30,
proxy : {
type: 'jsonp',
url: Properties.PORTAL_SERVICE_BASE_URL+'test/categories/list',
callbackKey: 'callback',
startParam: false, //to remove param "start" and making it constant
extraParams: {
start : 0,
_type : 'json'
},
reader: {
type: 'json',
rootProperty: 'categories.data',
totalProperty: 'categories.status.totalCount'
}
},
listeners:{
load: function( me, records, successful, operation, eOpts ){
bossController.loadMagazines(this, records);
}
}
}
});

最佳答案

您的示例代码中缺少一些部分,所以只是一个提示/猜测。我猜您的商店将 autoLoad 属性设置为 true,因此会在初始化后立即加载。把它关掉,试试这样的东西。

init : function(){
bossController = this.getApplication().getController('Boss'); // bossController where is this var defined?
// fire a ready event
// or
Ext.StoreMgr.lookup('YourStoreName').load();
}

或提供有关商店的更多信息、加载者、加载时间以及加载范围。

关于javascript - 查看和存储在 Controller 初始化之前加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13972398/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com