将模型绑定到使用AppCelerator从控制器查看的模型



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,则该模型由TableViewonClick事件分配:

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}"。

最新更新