Ti Alloy数据绑定:无法将特定的Backbone模型实例绑定到视图

时间:2014-05-09 15:54:09

标签: backbone.js titanium titanium-alloy

所有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;传入的模型,如果视图要响应底层集合中的更改,也会很不方便。

我在这里遗漏了什么,或者是否有一个我不知道的更好的解决方案?

非常感谢任何反馈或见解。

干杯, 弗朗索瓦。

1 个答案:

答案 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元素)。我不认为这与问题中提供的解决方案有很大不同,但我认为它更简单。