有没有办法可以覆盖Titanium中Widget元素的click事件监听器?
我有一个小部件,在我使用该小部件的控制器中,我需要在单击元素时执行一些其他操作,而不是在小部件中定义。
有没有办法让它成为现实?
TIA:)
答案 0 :(得分:1)
是的,当然你可以覆盖你想要的任何东西。
使用Alloy,您将通过 id 参数&使用经典模型,您只需使用小部件变量名称。
假设您的XML文件中有一个小部件 com.widget.somewidget :
<强> INDEX.XML 强>
<Alloy>
<Window>
<Widget id="widget_id" src="com.widget.somewidget"></Widget>
</Window>
</Alloy>
<强> widget.xml 强>
<Alloy>
<Button id="widget_button" title="Hello World!" />
</Alloy>
在 widget.js 中,您现在将导入要为其覆盖Click事件的元素,如下所示:
$.exportedButtonId = $.widget_button;
最后,您可以覆盖按钮点击事件,如下所示:
<强> index.js 强>
var widgetButton = $.widget_id.exportedButtonId;
widgetButton.addEventListener('click', function (e){});
这是如何更灵活地利用小部件的基本示例,但实现是无穷无尽的,取决于应用程序要求。所以祝你好运!
答案 1 :(得分:0)
要覆盖给定的函数,我将在窗口小部件中导出一个setter函数:
像往常一样构建小部件 的 widget.xml:强>
<Alloy>
<Button onClick="doClick" title="Hello World!" />
</Alloy>
导出setter函数$.overrideListener
,以便能够从窗口小部件的外部覆盖clickHandler
的 widget.js:强>
function doDefaultStuff(e){
//Do default stuff
}
var clickHandler = doDefaultStuff
function doClick(e){
clickHandler(e)
}
$.overrideListener = function(callback){
clickHandler = callback
}
<强> INDEX.XML:强>
<Alloy>
<Window>
<Widget id="widget_id" src="com.widget.somewidget"></Widget>
</Window>
</Alloy>
如果您希望执行与默认行为不同的操作,请覆盖clickHandler
的 index.js:强>
function doCustomStuff(e){
//Do Custom Stuff
}
$.widget_id.overrideListener(doCustomStuff)