1

タブパネルのリストビューに次のリスナーがあります。

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 に渡し、それらを form の外、たとえばタイトルや html で使用できるようにすることです。基本的に、タブ パネル内にリストがあり、itemtap では Ext.Viewport.animateActiveItem を使用して別のビューを表示しています。

ListView は「Ext.form.Panel」であり、現在、initialize() 関数を介してツールバーとフィールドセットがありますが、フィールドセットをプレーンな html に置き換えたいのですが、setRecord() からのデータを使用できません。仕方。

4

2 に答える 2

1

私はこれを解決しました。主な問題は、まだ渡されていないデータを表示しようとしたことです。これはすべて初期化関数にあったためです。ビューポートを介してデータを渡す方法も見つけました。

データを渡したいビューを表示する関数が今どのように見えるかを次に示します。

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

ビューでデータを使用する方法は次のとおりです。

var datafield = this.getData();
console.log(datafield .id);
于 2012-10-25T18:24:15.337 に答える
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);
}

これがお役に立てば幸いです。追加のヘルプが必要な場合、または問題を誤解している場合は、コメントを返してください。

于 2012-10-25T14:11:29.453 に答える