edit:heres示例:https://github.com/prakash-anubavam/alloypreloadedsqlitedb/tree/tree/master/master/app和Sumarized,视图详细信息如何
来自ASP.NET MVC,我有一些问题了解此MVC。
我可以理解如何使用表格,例如:
<TableView id="table" dataCollection="fighters" onClick="showId" dataTransform="transformData">
并获取控制器中的数据,我知道它将使用全局(Singleton)的战斗机集合,并且将模型绑定到视图。
但是我遇到了一个示例(我现在找不到),它具有视图,没有表,只有一些标签和文本='{variablename}',我认为它是从模型中获得的。但是,控制器没有分配模型(来自ARGS [0],因为它总是从具有实际表的另一个控制器中调用),但是它从未以任何方式将模型实例分配给视图...所以问题是它是如何工作的?合金是否足够明智,可以检测实际的模型实例并使用它?我该怎么做?类似$ model = ...;或$ .details.model = ...;或类似的东西?如果从未用表格或其他东西分配模型,则该视图如何知道从哪里进行'{variablename}'。
这实际上是一个结转黑客,将来可能不起作用。
如果您在示例(控制器)中查看index.js
,则该模型由TableView
的onClick
事件分配:
function showId(e) {
if (e.row.model) {
var detailObj=fighters.get(e.row.model);
// Assigning to the $model actually sets this model as the one to bind too
var win=Alloy.createController('detail',{"$model":detailObj});
win.getView().open();
}
}
这是一个自动分配用于数据指标的" Specai"变量,是封面下的工作方式(或在封面下工作)。
这是无证的,不理想或建议。
我发现托尼·卢卡瓦奇(Tony Lukasavage您可以在这里找到Josiah Hester的答案是基于它的(是的,当心这是一个黑客)。
虽然,Fokke Zandbergen提供了另一种值得看的东西,也许不知道,不知道。
扩展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}"。