我正在研究钛模块。
对 TiViewProxy
感到有点困惑。
为什么我们在ViewProxy中使用-(void)setColor_:(id)color
这样的方法(方法中的_)?
如果我们没有写任何这样的方法,当我们打电话时会发生什么:
myModule.createView({
color : 'red'
});
如果我没有在createView()
方法上传递任何参数,我的视图创建代码将如何在我的模块上运行。
意思是:
我只是在我的app.js中创建我的视图,如:
myModule.createView();
我正在处理里面的视图创建代码:
-(void)setColor_:(id)color
{
}
如果我没有通过任何论证我的观点是如何创建的?它会起作用吗?
答案 0 :(得分:3)
我将解释各种活动部件。它是平台的所有组成部分,因此您不知道它是如何工作的并不重要。但是,知道它为你做这件事很重要。所以......
当您调用myModule.createView()时,平台会查找模块中与某些约束匹配的子项。让我通过查看ti.pageflip
模块来扩展该声明。 myModule
的班级是TiPageflipModule
。当我调用myModule.createView()
时,平台将查找TiPageflipViewProxy
,以便它可以实例化它。 TiPageflip
来自模块的名称,减去“模块”。 “查看”来自createView
。 “代理”被标记,因为这是我们从JavaScript到本机的方式。 TiPageflipViewProxy
创建了原生视图TiPageflipView
。代理处理JavaScript和本机视图之间的交互。到目前为止有意义吗?
公开属性的部分命名约定是它们以_
为后缀。平台会查找这些方法,并在创建字典createView({ whatever: 'value' })
以及属性view.whatever = 'value';
或方法view.setWhatever('value')
中调用每个方法。 (在iOS mod开发指南中搜索“下划线”一词,它只出现一次,以便阅读更多内容:https://wiki.appcelerator.org/display/guides/iOS+Module+Development+Guide)。
因为您没有定义createView,所以平台正在为您执行此操作,并且它处理createView()
与createView({})
相同。这是一个可选的参数。这只是定义。