【发布时间】:2016-06-17 19:32:53
【问题描述】:
我正在尝试将图像列表的 visibility 属性绑定到数组。
这是我所拥有的:
XML 标记
<GridLayout id="menu">
<Image src="{{ ... }}" tap="menuItemTap" id="explore" visibility="{{ menuItemsArray[0].visibility }}" />
<Image src="{{ ... }}" tap="menuItemTap" id="community" visibility="{{ menuItemsArray[1].visibility }}"/>
<Image src="{{ ... }}" tap="menuItemTap" id="profile" visibility="{{ menuItemsArray[2].visibility }}"/>
<Image src="{{ ... }}" tap="menuItemTap" id="ranking" visibility="{{ menuItemsArray[3].visibility }}"/>
<Image src="{{ ... }}" tap="menuItemTap" id="camera" visibility="{{ menuItemsArray[4].visibility }}"/>
</GridLayout>
如你所见,我将visibility绑定到menuItemsArray,它是Observable的一部分,定义如下:
可观察
mainObservable = new Observable({
currentActive:"explore",
menuItemsArray:[
new MenuItem("explore"),
new MenuItem("community"),
new MenuItem("profile"),
new MenuItem("ranking"),
new MenuItem("camera")
]
});
menuItemsArray 是MenuItem 对象的数组,它有两个属性:name 和visibility,后者绑定到图像。
编辑
我在此也发布MenuItem 类
菜单项
var menuitem = function(name,visibility){
var _name = name;
var _visibility = visibility || "collapsed" ;
Object.defineProperty(this,"visibility",{
get : function(){
return _visibility;
},
set : function(visibility){
_visibility = visibility;
console.log("called set-> visibility to " + _visibility);
}
});
Object.defineProperty(this,"name",{
get : function(){
return _name;
},
set : function(name){
_name = name;
}
})
}
根据@peterstaev 的建议,我还尝试了以下方法:
菜单项
class MenuItem extends Observable{
constructor(name,visibility){
super();
this._name = name;
this._visibility = visibility || "collapsed";
}
get visibility(){
return this._visibility;
}
set visibility(visibility){
this._visibility = visibility;
console.log("called set-> visibility to " + this._visibility);
}
get name(){
return this._name;
}
set name(name){
this._name = _name;
}
};
module.exports = MenuItem;
有趣的是,visibility 默认设置为 "collapsed",事实上,没有任何图像显示(这是所需的行为)。但是,如果将 visibility 切换到 "visible" - mainObservable.menuItemsArray[0].visibility = "visible" - 它不会影响图像,因为它不会显示。
是什么导致了这个问题?我是否不当使用 Observable ?
【问题讨论】:
标签: nativescript