4

カスタムのリスト項目ビューを作成しました ( http://news.qooxdoo.org/tutorial-part-4-2-custom-widgets-4に基づく)。

このリストの選択項目に問題があります。常に最初の要素が選択されています (リストのどの要素をクリックしても)。

問題を解決するにはどうすればよいですか?

これが私のリストアイテムウィジェットです:

qx.Class.define("project.MyView", {
    拡張: qx.ui.core.Widget,
    include : [qx.ui.form.MModelProperty],

    構造:関数(){
        this.base(引数);

        var レイアウト = 新しい qx.ui.layout.Grid(4, 2);
        layout.setColumnFlex(1, 1);
        this._setLayout(レイアウト);

        this._createChildControl("アイコン");
        this._createChildControl("日付");
        this._createChildControl("説明");
    }、

    プロパティ : {
        外観 : {
            絞り込む:真、
            初期化:「リスト項目」
        }、

        アイコン: {
            チェック:「文字列」、
            適用: "_applyIcon",
            nullable : true
        }、

        日にち : {
            チェック:「文字列」、
            適用: "_applyDate",
            nullable : true
        }、

        説明 : {
            チェック:「文字列」、
            適用: "_applyDescription",
            nullable : true
        }
    }、

    メンバー: {

        _createChildControlImpl : 関数(id) {
            変数制御;

            スイッチ (id) {
            ケース "アイコン":
                コントロール = 新しい qx.ui.basic.Image(this.getIcon());
                control.setAnonymous(真);
                this._add(コントロール、{
                    行: 0,
                    列: 0,
                    行スパン: 2
                });
                壊す;

            ケース「日付」:
                コントロール = 新しい qx.ui.basic.Label(this.getDate());
                control.setAnonymous(真);
                this._add(コントロール、{
                    行: 0,
                    列: 2
                });
                壊す;

            ケース「説明」:
                コントロール = 新しい qx.ui.basic.Label(this.getDescription());
                control.setAnonymous(真);
                control.setRich(真);
                this._add(コントロール、{
                    行: 0,
                    列: 1
                });
                壊す;
            }

            || コントロールを返す || this.base(引数、id);
        }、

        _applyIcon : 関数(値, 古い) {
            var icon = this.getChildControl("icon");
            icon.setSource(値);
        }、

        _applyDescription : 関数 (値、古い) {
            var description = this.getChildControl("説明");
            description.setValue(値);
        }、

        _applyDate : 関数 (値、古い) {
            var date = this.getChildControl("date");
            date.setValue(値);
        }

    }、

    破壊:関数(){

    }

});

...そしてここで私はそれをどのように使用するか:

this.list = 新しい qx.ui.form.List();
this.listController = new qx.data.controller.List(null, this.list);
this.listController.setDelegate({
    createItem : 関数() {
        新しいプロジェクトを返します.MyView();
    }、

    bindItem : function(コントローラー、アイテム、id) {
        controller.bindProperty("説明", "説明", null,item, id);
        controller.bindProperty("icon", "icon", null, item, id);
        controller.bindProperty("date", "date", null, item, id);
    }、

    configureItem : 関数(項目) {
        item.getChildControl("アイコン").setWidth(48);
        item.getChildControl("アイコン").setHeight(48);
        item.getChildControl("アイコン").setScale(true);
        item.setMinHeight(52);
    }
});
4

1 に答える 1

5

問題は bindItem 関数にあるようです。独自の bindItem 関数を提供するとすぐに、すべての既定のバインドされたプロパティはバインドされなくなります。これは、ラベル、アイコン、およびモデルが同期していないことを意味します。コードを試したことはありませんが、モデルを単純にバインドするだけで問題は解決すると思います。

controller.bindProperty("", "model", null, item, id);

これは、モデルのプロパティとそれとで異なるものが必要な場合に必要です。たとえば、選択に使用されます。このコード行は、オブジェクト全体をモデルとして使用するだけであり、ほとんどの場合、これは良い考えです。

ベスト、マーティン

于 2010-12-21T07:17:35.990 に答える