这是个好主意吗?
我最近问了一个有关主题的问题(让用户选择一个主题并立即应用它)。为此,我想到了使用模型和绑定的方法-借此机会我终于学习了。 我得到了理想的结果-创建一个主题并使用带有数据绑定的模型来应用它,并且在我的测试应用中,我做了以下事情:
app.tss “标签”: { backgroundColor:“ {theme.backgroundColor}” }
(当然,在实际应用中,会有更多的定义和更多的绑定。
要做到这一点,我需要在每个页面中都包含我的模型,例如(index.xml):
<Alloy>
<Model src="theme" />
<Window class="container" layout="vertical">
<View
id="test"
width="150"
height="150"
top="10">
</View>
<Label id="label" onClick="doClick" top="10">Hello, World</Label>
<Label onClick="doClick" top="10">Hello, World</Label>
<Label onClick="doClick" top="10">Hello, World</Label>
<Label onClick="doClick" top="10">Hello, World</Label>
<Label onClick="doClick" top="10">Hello, World</Label>
<Label onClick="doClick" top="10">Hello, World</Label>
<Label onClick="doClick" top="10">Hello, World</Label>
<Label onClick="doClick" top="10">Hello, World</Label>
<Label onClick="doClick" top="10">Hello, World</Label>
<Label onClick="doClick" top="10">Hello, World</Label>
<Label onClick="doClick" top="10">Hello, World</Label>
</Window>
</Alloy>
(在我的真实应用中,我正在使用跨平台导航控件的实现,因此当我在一个地方打开窗口时,我只会通过此模型)
显然,这样做会为页面上几乎每个元素创建许多绑定。我不完全了解幕后情况,但是我猜测它会为每个这样的绑定值创建一个侦听器-这会导致许多侦听器,大量开销并为页面生成更多代码。>
猜猜我正在回答我自己的问题-建议您继续研究此路径吗?这有多糟?
答案 0 :(得分:0)
可以使用类,并在更改时重新应用它们。您只需在每个控制器的一个位置监视事件
您可以看一下我写的有关基于GitHub的方向的动态样式的示例
您可以这样做:
".DynamicLabel[if=Alloy.Globals.isPortrait]": {}
您应该使用Backbone事件,就像我在上面链接的存储库中指定的一样。
Alloy.js:
Alloy.Globals.events = _.clone(Backbone.Events);
Controller.js:
Alloy.Globals.events.on('orientationchange', () => {
但是:这非常复杂,并引入了您不需要的复杂性。对于复杂的应用程序,我不建议使用事件部分。但是..有可能!
对于复杂的应用程序,我建议使用if
中的tss
过滤器,然后关闭并重新打开要重新设置样式的控制器。