所有Ti Alloy专家都在那里:
有a couple questions已经处理过同样的问题,没有一个标记有接受的答案,当然没有人回答我个人的满意。让我解释为什么我仍然认为问题是相关的,现有的答案和评论尽管如此:
在Alloy中,您可以将转发器类型的元素绑定到Backbone集合中的模型;这很简单,效果很好。 但是,在典型的主 - 详细视图布置中,您可能希望将视图绑定到特定的模型实例,为此,您已将其传递到控制器中。
我已经能够为此制作出标准的合金技术,这似乎就是你在Alloy标记中声明了一个模型实例,例如。 <Model id="myModelInstance" src="myBackboneModel" instance="true">
然后通过$.myModelInstance...
引用继续在控制器代码中使用此模型。
当您将自己的模型实例传递给控制器时会出现问题,因为您无法指出&#34;指向&#34;声明的视图模型实例到现有的模型实例。你必须改为&#34;复制&#34;通过执行
将模型属性添加到视图的模型实例中$.myModelInstance.set(myPassedInModel.attributes);
这在实践中运作良好,但要求您将视图模型的更改复制回&#34;真实&#34;传入的模型,如果视图要响应底层集合中的更改,也会很不方便。
我在这里遗漏了什么,或者是否有一个我不知道的更好的解决方案?
非常感谢任何反馈或见解。
干杯, 弗朗索瓦。
答案 0 :(得分:0)
我看到这个问题现在已经有一年半了,但是对于子孙后代,我将提供我的首选解决方案:使用单例进行详细视图并在全局范围内设置模型数据,而不是使用实例。一个简单的例子:
// alloy.js
// initialize the model on app start
var detailModel = Alloy.Models.instance('myModel');
// repeater.xml
<Button title='Show Detail' onClick='showDetail' />
// repeater.js
function showDetail() {
Alloy.Models.myModel.clear();
Alloy.Models.myModel.set($.model.toJSON());
navigateToDetailView();
}
// detail.xml
// access global singleton in your detail view
<Alloy>
<Model src='myModel' />
<Window title='{myModel.title}' >
<Label text='{myModel.description}' />
</Window>
</Alloy>
请注意,要执行此操作,您的转发器必须拥有自己的控制器(使用Require元素)。我不认为这与问题中提供的解决方案有很大不同,但我认为它更简单。