清除 ScrollableView 中的视图
clear views in ScrollableView
我有一个钛项目 alloy。
然后在屏幕上我有一个 ScrollableView。当我打开此屏幕时,我需要删除屏幕的所有视图,但我不能。
principal.xml
<ScrollableView id="EmisorView" onScrollend="CambioEmisor" top="10%" height="10%" width="100%" backgroundColor="#fff">
</ScrollableView>
principal.js
function ConstruyoEmisores(){
var db = Ti.Database.open('Termolink');
var rows = db.execute('SELECT * FROM Regulaciones ORDER BY Regulaciones.Nombre,Regulaciones.Serie');
NRegistros=ComprueboRegBD();
for (i=0;i<$.EmisorView.views.length;i++){
$.EmisorView.removeView($.EmisorView.views[i]);
}
var i;
var serieenqueestoy=0;
for (i=0;i<NRegistros;i++){
TablaNombreTermostatos[i]= rows.field(2);
if (rows.field(0)==Serie) serieenqueestoy=i; //esto es para posicionar en el seleccionado
var nuevaView=Ti.UI.createView();
var titulo1=Ti.UI.createLabel({
id: "NombreTerm",
text: TablaNombreTermostatos[i],
color: "#b0acb1" ,
textAlign: Ti.UI.TEXT_ALIGNMENT_LEFT,
left:"44%",
top:"33%"
});
var imagen1=Ti.UI.createImageView({
id: "Radiador",
image: "/figura radiador.png",
height: "60%",
left:"32%",
top:"20%"
});
if (Ti.Platform.name=="iPhone OS") {
imagen1.left = "13%";
}
nuevaView.add(imagen1);
nuevaView.add(titulo1);
$.EmisorView.addView(nuevaView);
rows.next();
}
db.close();
$.EmisorView.scrollToView(serieenqueestoy);
}
第一次运行的时候一切正常,但是在其他时候ScrollableView的浏览量越来越多
有什么关于清除 scrollableView 的建议吗??
我使用 titanium 5.3.1、alloy、Android 和 IOS。
新版本。不要 运行
$.EmisorView.cleanup = function() {
$.destroy();
$.off();
//null your objects here
};
function ConstruyoEmisores(){
var db = Ti.Database.open('Termolink');
var rows = db.execute('SELECT * FROM Regulaciones ORDER BY Regulaciones.Nombre,Regulaciones.Serie');
NRegistros=ComprueboRegBD();
var CuantosViews=$.EmisorView.views.length;
for (i=0;i<CuantosViews;i++){
$.EmisorView.views[parseInt(parseInt(i))].cleanup && $.EmisorView.views[parseInt(parseInt(i))].cleanup();
$.EmisorView.removeView($.EmisorView.views[i]);
$.EmisorView.views[i]=null;
}
var i;
var serieenqueestoy=0;
for (i=0;i<NRegistros;i++){
TablaSerieTermostatos[i]=rows.field(0);
TablaPinTermostatos[i]=rows.field(1);
TablaNombreTermostatos[i]= rows.field(2);
TablaTemperTermostatos[i]= rows.field(345);
TablaConsignaTermostatos[i]= rows.field(5);
TablaEstadoTermostatos[i]= rows.field(344);
if (rows.field(0)==Serie) serieenqueestoy=i; //esto es para posicionar en el seleccionado
var nuevaView=Ti.UI.createView();
var titulo1=Ti.UI.createLabel({
id: "NombreTerm",
text: TablaNombreTermostatos[i],
color: "#b0acb1" ,
textAlign: Ti.UI.TEXT_ALIGNMENT_LEFT,
left:"44%",
top:"33%"
});
var imagen1=Ti.UI.createImageView({
id: "Radiador",
image: "/figura radiador.png",
height: "60%",
left:"32%",
top:"20%"
});
if (Ti.Platform.name=="iPhone OS") {
imagen1.left = "13%";
}
nuevaView.add(imagen1);
nuevaView.add(titulo1);
$.EmisorView.addView(nuevaView);
//$.EmisorView.insertViewsAt(i,nuevaView);
rows.next();
}
db.close();
$.EmisorView.scrollToView(serieenqueestoy);
}
最终版,现在 运行
var CuantosViews=$.EmisorView.views.length;
for (i= CuantosViews;i>0;i--){
$.EmisorView.removeView($.EmisorView.views[i-1]);
$.EmisorView.views[i-1]=null;
}
感谢大家。问题是这个循环必须从头到尾。然后删除所有视图就好了。
一个非常简单的解决方案是使用removeAllChildren
属性。您可以找到 doc here
$.EmisorView.removeAllChildren();
然后,您似乎只在创建视图时执行函数,而不是在将焦点添加到视图时执行函数。所以...在 .xml
文件中的 Window
上:
<Window onFocus="onFocusWindow" />
然后在您的控制器中创建一个名为 onFocusWindow
的函数并在那里执行 removeAllChildren
方法。
如果您尝试删除 ScrollableView,请不要使用 remove() 或 removeAllChildren() 方法,而是使用 removeView() 方法。
这是删除 ScrollableView 视图并清理它们的方法:
if($.scrollableview.views && parseInt($.scrollableview.views.length)) for(var i = parseInt($.scrollableview.views.length); i > 0; i--) if($.scrollableview.views[parseInt(parseInt(i)-1)]) {
$.scrollableview.views[parseInt(parseInt(i)-1)].cleanup && $.scrollableview.views[parseInt(parseInt(i)-1)].cleanup();
$.scrollableview.removeView($.scrollableview.views[parseInt(parseInt(i)-1)]);
$.scrollableview.views[parseInt(parseInt(i)-1)] = null;
}
这是一个视图示例:
view.xml
<View id="view">
<Label id="title"/>
</View>
view.js
$.title.text = 'test';
$.view.cleanup = function() {
$.destroy();
$.off();
//null your objects here
};
我有一个钛项目 alloy。 然后在屏幕上我有一个 ScrollableView。当我打开此屏幕时,我需要删除屏幕的所有视图,但我不能。
principal.xml
<ScrollableView id="EmisorView" onScrollend="CambioEmisor" top="10%" height="10%" width="100%" backgroundColor="#fff">
</ScrollableView>
principal.js
function ConstruyoEmisores(){
var db = Ti.Database.open('Termolink');
var rows = db.execute('SELECT * FROM Regulaciones ORDER BY Regulaciones.Nombre,Regulaciones.Serie');
NRegistros=ComprueboRegBD();
for (i=0;i<$.EmisorView.views.length;i++){
$.EmisorView.removeView($.EmisorView.views[i]);
}
var i;
var serieenqueestoy=0;
for (i=0;i<NRegistros;i++){
TablaNombreTermostatos[i]= rows.field(2);
if (rows.field(0)==Serie) serieenqueestoy=i; //esto es para posicionar en el seleccionado
var nuevaView=Ti.UI.createView();
var titulo1=Ti.UI.createLabel({
id: "NombreTerm",
text: TablaNombreTermostatos[i],
color: "#b0acb1" ,
textAlign: Ti.UI.TEXT_ALIGNMENT_LEFT,
left:"44%",
top:"33%"
});
var imagen1=Ti.UI.createImageView({
id: "Radiador",
image: "/figura radiador.png",
height: "60%",
left:"32%",
top:"20%"
});
if (Ti.Platform.name=="iPhone OS") {
imagen1.left = "13%";
}
nuevaView.add(imagen1);
nuevaView.add(titulo1);
$.EmisorView.addView(nuevaView);
rows.next();
}
db.close();
$.EmisorView.scrollToView(serieenqueestoy);
}
第一次运行的时候一切正常,但是在其他时候ScrollableView的浏览量越来越多
有什么关于清除 scrollableView 的建议吗??
我使用 titanium 5.3.1、alloy、Android 和 IOS。
新版本。不要 运行
$.EmisorView.cleanup = function() {
$.destroy();
$.off();
//null your objects here
};
function ConstruyoEmisores(){
var db = Ti.Database.open('Termolink');
var rows = db.execute('SELECT * FROM Regulaciones ORDER BY Regulaciones.Nombre,Regulaciones.Serie');
NRegistros=ComprueboRegBD();
var CuantosViews=$.EmisorView.views.length;
for (i=0;i<CuantosViews;i++){
$.EmisorView.views[parseInt(parseInt(i))].cleanup && $.EmisorView.views[parseInt(parseInt(i))].cleanup();
$.EmisorView.removeView($.EmisorView.views[i]);
$.EmisorView.views[i]=null;
}
var i;
var serieenqueestoy=0;
for (i=0;i<NRegistros;i++){
TablaSerieTermostatos[i]=rows.field(0);
TablaPinTermostatos[i]=rows.field(1);
TablaNombreTermostatos[i]= rows.field(2);
TablaTemperTermostatos[i]= rows.field(345);
TablaConsignaTermostatos[i]= rows.field(5);
TablaEstadoTermostatos[i]= rows.field(344);
if (rows.field(0)==Serie) serieenqueestoy=i; //esto es para posicionar en el seleccionado
var nuevaView=Ti.UI.createView();
var titulo1=Ti.UI.createLabel({
id: "NombreTerm",
text: TablaNombreTermostatos[i],
color: "#b0acb1" ,
textAlign: Ti.UI.TEXT_ALIGNMENT_LEFT,
left:"44%",
top:"33%"
});
var imagen1=Ti.UI.createImageView({
id: "Radiador",
image: "/figura radiador.png",
height: "60%",
left:"32%",
top:"20%"
});
if (Ti.Platform.name=="iPhone OS") {
imagen1.left = "13%";
}
nuevaView.add(imagen1);
nuevaView.add(titulo1);
$.EmisorView.addView(nuevaView);
//$.EmisorView.insertViewsAt(i,nuevaView);
rows.next();
}
db.close();
$.EmisorView.scrollToView(serieenqueestoy);
}
最终版,现在 运行
var CuantosViews=$.EmisorView.views.length;
for (i= CuantosViews;i>0;i--){
$.EmisorView.removeView($.EmisorView.views[i-1]);
$.EmisorView.views[i-1]=null;
}
感谢大家。问题是这个循环必须从头到尾。然后删除所有视图就好了。
一个非常简单的解决方案是使用removeAllChildren
属性。您可以找到 doc here
$.EmisorView.removeAllChildren();
然后,您似乎只在创建视图时执行函数,而不是在将焦点添加到视图时执行函数。所以...在 .xml
文件中的 Window
上:
<Window onFocus="onFocusWindow" />
然后在您的控制器中创建一个名为 onFocusWindow
的函数并在那里执行 removeAllChildren
方法。
如果您尝试删除 ScrollableView,请不要使用 remove() 或 removeAllChildren() 方法,而是使用 removeView() 方法。
这是删除 ScrollableView 视图并清理它们的方法:
if($.scrollableview.views && parseInt($.scrollableview.views.length)) for(var i = parseInt($.scrollableview.views.length); i > 0; i--) if($.scrollableview.views[parseInt(parseInt(i)-1)]) {
$.scrollableview.views[parseInt(parseInt(i)-1)].cleanup && $.scrollableview.views[parseInt(parseInt(i)-1)].cleanup();
$.scrollableview.removeView($.scrollableview.views[parseInt(parseInt(i)-1)]);
$.scrollableview.views[parseInt(parseInt(i)-1)] = null;
}
这是一个视图示例: view.xml
<View id="view">
<Label id="title"/>
</View>
view.js
$.title.text = 'test';
$.view.cleanup = function() {
$.destroy();
$.off();
//null your objects here
};