创建项目时获取 Ext.Container 的一些静态属性
Get get something of statics properties of Ext.Container when creating item
我有以下问题。我已经创建了继承的容器
Ext.Container 并使用项目数组创建一些项目。在构造函数中
我有异步逻辑并填充一些静态属性。我想用
创建容器项时此静态属性的值。我该如何解决这个问题?这是我逻辑的重要组成部分。
Ext.define('somename', {
extend: 'Ext.Container',
xtype: 'somextype',
id: 'someid',
statics: {
property1: false,
property2: null,
property3: null
},
config: {
dataAutoId: 'someid',
items: [{
xtype: 'panel',
html: 'so here i want to use value of property1',
cls: 'some',
id: 'someid',
dataAutoId: 'someid'
}]
},
constructor: function () {
this.callParent(arguments);
// here i have implemented some asinhronous logic
// and as a result set value of property1
var statics = this.statics();
statics.property1 = 'test string';
}
});
我试过:
html: this.statics.property1
和
html: this.statics().property1
但出现错误:
Uncaught Error: The following classes are not declared even if their files have been loaded.
编辑:
阅读 Sencha Touch 2 的文档后,我找到了解决方案。
在此之后可以将异步逻辑完成到构造函数中
我们可以将项目添加到容器中。如果异步逻辑需要很长时间,这个决定可能会导致问题。出于这个原因,最好显示一个微调器或类似的东西。这是解决方案的示例代码。
Ext.define('MyApp.view.Main', {
extend: 'Ext.tab.Panel',
xtype: 'main',
requires: [
'Ext.TitleBar',
'Ext.Video'
],
static: {
title: null
},
config: {
tabBarPosition: 'bottom'
},
constructor: function () {
this.callParent(arguments);
var statics = this.statics();
statics.title = 'test string';
this.renderItems();
},
'renderItems': function() {
var statics = this.statics();
this.add([{
title: statics.title,
iconCls: 'home',
styleHtmlContent: true,
scrollable: true,
items: {
docked: 'top',
xtype: 'titlebar',
title: 'Welcome to Sencha Touch 2'
},
html: [
"dfdfhfjYou've just generated a new Sencha Touch 2 project. What you're looking at right now is the ",
"contents of <a target='_blank' href=\"app/view/Main.js\">app/view/Main.js</a> - edit that file ",
"and refresh to change what's rendered here."
].join("")
}, {
title: 'Get Started',
iconCls: 'action',
items: [{
docked: 'top',
xtype: 'titlebar',
title: 'Getting Started'
}, {
xtype: 'video',
url: 'http://av.vimeo.com/64284/137/87347327.mp4?token=1330978144_f9b698fea38cd408d52a2393240c896c',
posterUrl: 'http://b.vimeocdn.com/ts/261/062/261062119_640.jpg'
}]
}]);
}
});
感谢所有给我建议的人。
您不能以这种方式进行数据绑定。视图首先由框架加载,然后实例化。这意味着如果你想设置 html: this.property1
你的静态属性还没有值。
这个有效:
Ext.define('Fiddle.view.somename', {
extend: 'Ext.Container',
xtype: 'somextype',
id: 'someid',
statics: {
property1: false,
property2: null,
property3: null
},
config: {
dataAutoId: 'someid2',
items: [{
xtype: 'panel',
html: 'so here i want to use value of property1',
cls: 'some',
id: 'someid3',
dataAutoId: 'someid'
}]
},
constructor: function () {
this.callParent(arguments);
// here i have implemented some asinhronous logic
// and as a result set value of property1
var statics = this.statics();
this.property1 = 'test string';
this.down('#someid3').setHtml(this.property1);
}
});
Uncaught Error: The following classes are not declared even if their files have been loaded
这只是意味着您的源文件命名与 类 它们实际声明的内容不一致。例如,您可能有一个名为 Foo.js 的文件,但它实际上包含 Ext.define('Bar'...
.
In constructor I'm have asynchronous logic and fill some static
properties. I want to use value of this static properties when
creating items of container. How I can solve this problem?
请牢记:只有在 自 Container
构建一段时间后 添加项目时,该方法才有意义。对 items
配置中指定的项目使用该方法将不起作用,因为这些项目将在 在 完成异步逻辑之前创建。因此,如果您需要在 items
配置中指定的项目上使用这些静态属性,则必须将异步逻辑置于 Container
之外,并且仅在属性可用后才构建它。
我有以下问题。我已经创建了继承的容器 Ext.Container 并使用项目数组创建一些项目。在构造函数中 我有异步逻辑并填充一些静态属性。我想用 创建容器项时此静态属性的值。我该如何解决这个问题?这是我逻辑的重要组成部分。
Ext.define('somename', {
extend: 'Ext.Container',
xtype: 'somextype',
id: 'someid',
statics: {
property1: false,
property2: null,
property3: null
},
config: {
dataAutoId: 'someid',
items: [{
xtype: 'panel',
html: 'so here i want to use value of property1',
cls: 'some',
id: 'someid',
dataAutoId: 'someid'
}]
},
constructor: function () {
this.callParent(arguments);
// here i have implemented some asinhronous logic
// and as a result set value of property1
var statics = this.statics();
statics.property1 = 'test string';
}
});
我试过:
html: this.statics.property1
和
html: this.statics().property1
但出现错误:
Uncaught Error: The following classes are not declared even if their files have been loaded.
编辑:
阅读 Sencha Touch 2 的文档后,我找到了解决方案。 在此之后可以将异步逻辑完成到构造函数中 我们可以将项目添加到容器中。如果异步逻辑需要很长时间,这个决定可能会导致问题。出于这个原因,最好显示一个微调器或类似的东西。这是解决方案的示例代码。
Ext.define('MyApp.view.Main', {
extend: 'Ext.tab.Panel',
xtype: 'main',
requires: [
'Ext.TitleBar',
'Ext.Video'
],
static: {
title: null
},
config: {
tabBarPosition: 'bottom'
},
constructor: function () {
this.callParent(arguments);
var statics = this.statics();
statics.title = 'test string';
this.renderItems();
},
'renderItems': function() {
var statics = this.statics();
this.add([{
title: statics.title,
iconCls: 'home',
styleHtmlContent: true,
scrollable: true,
items: {
docked: 'top',
xtype: 'titlebar',
title: 'Welcome to Sencha Touch 2'
},
html: [
"dfdfhfjYou've just generated a new Sencha Touch 2 project. What you're looking at right now is the ",
"contents of <a target='_blank' href=\"app/view/Main.js\">app/view/Main.js</a> - edit that file ",
"and refresh to change what's rendered here."
].join("")
}, {
title: 'Get Started',
iconCls: 'action',
items: [{
docked: 'top',
xtype: 'titlebar',
title: 'Getting Started'
}, {
xtype: 'video',
url: 'http://av.vimeo.com/64284/137/87347327.mp4?token=1330978144_f9b698fea38cd408d52a2393240c896c',
posterUrl: 'http://b.vimeocdn.com/ts/261/062/261062119_640.jpg'
}]
}]);
}
});
感谢所有给我建议的人。
您不能以这种方式进行数据绑定。视图首先由框架加载,然后实例化。这意味着如果你想设置 html: this.property1
你的静态属性还没有值。
这个有效:
Ext.define('Fiddle.view.somename', {
extend: 'Ext.Container',
xtype: 'somextype',
id: 'someid',
statics: {
property1: false,
property2: null,
property3: null
},
config: {
dataAutoId: 'someid2',
items: [{
xtype: 'panel',
html: 'so here i want to use value of property1',
cls: 'some',
id: 'someid3',
dataAutoId: 'someid'
}]
},
constructor: function () {
this.callParent(arguments);
// here i have implemented some asinhronous logic
// and as a result set value of property1
var statics = this.statics();
this.property1 = 'test string';
this.down('#someid3').setHtml(this.property1);
}
});
Uncaught Error: The following classes are not declared even if their files have been loaded
这只是意味着您的源文件命名与 类 它们实际声明的内容不一致。例如,您可能有一个名为 Foo.js 的文件,但它实际上包含 Ext.define('Bar'...
.
In constructor I'm have asynchronous logic and fill some static properties. I want to use value of this static properties when creating items of container. How I can solve this problem?
请牢记:只有在 自 Container
构建一段时间后 添加项目时,该方法才有意义。对 items
配置中指定的项目使用该方法将不起作用,因为这些项目将在 在 完成异步逻辑之前创建。因此,如果您需要在 items
配置中指定的项目上使用这些静态属性,则必须将异步逻辑置于 Container
之外,并且仅在属性可用后才构建它。