Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Backbone.js Ti Alloy数据绑定:无法将特定主干模型实例绑定到视图_Backbone.js_Titanium_Titanium Alloy - Fatal编程技术网

Backbone.js Ti Alloy数据绑定:无法将特定主干模型实例绑定到视图

Backbone.js Ti Alloy数据绑定:无法将特定主干模型实例绑定到视图,backbone.js,titanium,titanium-alloy,Backbone.js,Titanium,Titanium Alloy,所有的钛合金专家: 已经有很多人在处理同样的问题,没有一个答案被认可,当然也没有一个答案让我个人满意。让我解释一下为什么我仍然认为这个问题是相关的,尽管有现有的答案和评论: 在Alloy中,您可以将中继器类型的元素绑定到主干集合中的模型;这很简单,效果也很好。 但是,在典型的主详图视图排列中,您可能希望将视图绑定到特定的模型实例,为此,您已将该实例传递到控制器中 据我所知,这方面的标准Alloy技术似乎是在Alloy标记中声明一个模型实例,例如,,然后通过$.myModelInstance…引用

所有的钛合金专家:

已经有很多人在处理同样的问题,没有一个答案被认可,当然也没有一个答案让我个人满意。让我解释一下为什么我仍然认为这个问题是相关的,尽管有现有的答案和评论:

在Alloy中,您可以将中继器类型的元素绑定到主干集合中的模型;这很简单,效果也很好。 但是,在典型的主详图视图排列中,您可能希望将视图绑定到特定的模型实例,为此,您已将该实例传递到控制器中

据我所知,这方面的标准Alloy技术似乎是在Alloy标记中声明一个模型实例,例如,
,然后通过
$.myModelInstance…
引用继续在控制器代码中使用该模型

当您将自己的模型实例传递到控制器中时,问题就会出现,因为您无法将声明的视图模型实例“指向”到现有的模型实例。您必须通过执行以下操作将模型属性“复制”到视图的模型实例

$.myModelInstance.set(myPassedInModel.attributes);
这在实践中工作得很好,但需要将对视图模型的更改整理回传入的“真实”模型,如果视图要响应基础集合中的更改,这也很不方便

我是否遗漏了什么,或者是否有更好的解决方案我不知道

任何反馈或见解都将不胜感激

干杯,
Francois。

我知道这个问题现在已经有一年半的历史了,但对于后代,我将提供我的首选解决方案:不使用实例,而是使用单个实例作为详细视图,并全局设置模型数据。一个简单的例子:

// 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>
//alloy.js
//在应用程序启动时初始化模型
var detailModel=Alloy.Models.instance('myModel');
//repeater.xml
//repeater.js
函数showDetail(){
Alloy.Models.myModel.clear();
Alloy.Models.myModel.set($.model.toJSON());
navigateToDetailView();
}
//detail.xml
//在详细视图中访问全局单例

请注意,要做到这一点,您的中继器必须有自己的控制器(使用Require元素),这是我能告诉您的。我不认为这与问题中提供的解决方案有很大不同,但我认为它更简单。

您能否在创建视图/控制器时将“模型”作为参数传递?通过这种方式,您总是使用同一个模型(并且不在两个方向上编组数据),如果您将该模型作为常规控制器参数传入,那么您只能选择将其设置到视图中,如我在问题中所述。尝试您在另一条评论中描述的$model hack不起作用(或者至少看起来不再起作用)——这是针对alloy 1.3.1的3.2.3.GA进行的测试。还有其他建议吗?你有没有想出更好的方法?令人难以置信的是,在文档或论坛上没有一个这样做的例子。