如何将数据从Controller传递到View

时间:2012-10-25 11:26:44

标签: cordova extjs sencha-touch-2

我在选项卡面板的列表视图中有以下监听器:

listeners: {
    itemtap: function (list, index, item, e) {
    var record = list.getStore().getAt(index);
    this.fireEvent('showListCommand', this, record);
}

这是我的控制器的配置:

config: {
    refs: {
        mainView: "mainview",
        activeLists: "activelists",
        listView: "listview"
        // I deleted some code for easier reading
    },
    control: {
        activeLists: {
            showListCommand: "onShowListCommand"
        }
    }
},

这是onShowListCommand函数及其调用的函数,两者都在控制器中:

onShowListCommand : function (list, record) {
    this.activateListView(record);
},

slideLeftTransition: { type: 'slide', direction: 'left' },

activateListView: function (record) {
    var listView = this.getListView();
    listView.setRecord(record);
    console.log(record.get('id'));
    Ext.Viewport.animateActiveItem(listView, this.slideLeftTransition);
},

控制台日志在这里按预期工作,它记录了被点击的列表项的ID。另外我知道setRecord函数有效,它在listView中的表单文本字段中显示模型的标题,id和预算字段。

现在,我在过去10小时内尝试成功的是将这些模型字段传递给listView 并且能够在表单之外使用它们,例如在标题或html中。所以基本上我在选项卡面板中有一个列表,在itemtap上我使用Ext.Viewport.animateActiveItem显示另一个视图。

ListView是“Ext.form.Panel”,它目前有一个工具栏和一个通过initialize()函数的字段集,但是我想用一些普通的html替换字段集但是我不能使用setRecord中的数据( )无论如何。

2 个答案:

答案 0 :(得分:1)

我解决了这个问题。主要问题是我试图显示尚未传递的数据,因为所有这些都在初始化函数中。我找到了一种通过视口传递数据的方法。

这是我的函数如何显示我想要传递数据的视图现在看起来:

activateListView: function (record) {
        Ext.Viewport.animateActiveItem( {xtype: 'listview', data: record.data}, {type: 'slide', direction: 'left'} );
    }

以下是我在视图中使用数据的方式:

var datafield = this.getData();
console.log(datafield .id);

答案 1 :(得分:0)

我希望我能正确理解你,但我不确定这会对你有所帮助。

无论如何,在我的应用程序中,我有一个面板,通过setData()函数从控制器中的侦听器函数(onListTap)进行更新。 这反过来在面板上触发updatedata事件,该事件也在控制器中获取,然后用于更改面板子项。

updatedata监听器的示例:

onMyPanelUpdate: function(component, newdata, options) {
    var holder = component.child("#innerContainer");

    holder.child("#detailsText").setData(newData);
    holder.child("#detailImg").setSrc(newData.imgUrl);
    holder.child("#detailsTitle").setData(newData);
    holder.child("#extras").setHtml(newData.extraHtml);
}

希望这对您有所帮助,如果您需要其他帮助或者我误解了您的问题,请回复评论。