编辑:以下是示例:https://github.com/prakash-anubavam/alloypreloadedsqlitedb/tree/master/app 并且sumarizing,视图details.xml如何知道从哪个模型获取数据?
来自asp.net mvc,我有一些理解这个MVC的问题。
我可以理解如何在视图中使用表格等:
<TableView id="table" dataCollection="fighters" onClick="showId" dataTransform="transformData">
获取控制器中的数据,我知道它将使用全局(单例)战斗机集合,并将模型绑定到视图。
但是我遇到了一个例子(我现在真的找不到)它有一个View,没有表格,只有一些标签和text ='{variableName}',我认为它来自模型。 然而,控制器没有分配模型(来自args [0],因为它总是从具有实际表的另一个控制器调用),但它从未以任何方式将模型实例分配给视图...所以问题是它是如何工作的?合金是否足够智能以检测实际模型实例并使用它?我该怎么办?像$ model = ...;或$ .details.model = ...;或类似的东西?如果模型从未分配过表或其他内容,那么视图如何知道从哪里取“{variableName}”。
答案 0 :(得分:2)
这实际上是一种遗留问题,将来可能无效,according to this thread.
如果您查看示例(控制器)中的index.js
,模型将由onClick
的{{1}}事件分配:
TableView
这是一个自动分配给数据绑定的“specai”变量,它是如何在封面下工作的(或者在封面下工作)。
这是没有记录的,不理想或不推荐。
答案 1 :(得分:1)
我发现Tony Lukasavage回答了更清洁的方法来绑定现有的模型来查看: You can find it here Josiah Hester的回答是基于它的(是的,要注意它是一种黑客行为)。
虽然,Fokke Zandbergen gave an alternative worth looking at,可能不那么讨厌,不知道。
扩展Josiah的答案,你可以这样做:
在主视图上:
<Alloy>
<Collection src="modelName" />
<View id="topview" class="container">
<TableView id="tblModels" dataCollection="modelName" dataTransform="transformModel">
<Require src="rowModel"/>
</TableView>
</View>
</Alloy>
然后,在主控制器上:
//retrieve the id of the model
var thisId = e.row.thisIndex;
//pass special key $model
var detailController = Alloy.createController("detail", { "$model": Alloy.Collections.detail.get(thisId) });
detailController.getView().open();
然后,详细视图:
<Alloy>
<View class="container" >
<Label text="{id}"/>
<Label text="{fullName}"/>
</View>
</Alloy>
在细节控制器上:不做任何特别的事。
如果在主控制器上有转换功能,它将返回一个对象,您可以在详细视图中使用其属性,如“{fullName}”。