qooxdoo - выбор виджетов из списка - PullRequest
4 голосов
/ 20 декабря 2010

Я сделал пользовательский просмотр списка (на основе http://news.qooxdoo.org/tutorial-part-4-2-custom-widgets-4).

У меня проблема с элементами выбора в этом списке. Всегда выбирается первый элемент (независимо от того, какой элемент в списке я нажму).

Что мне сделать, чтобы решить мою проблему?

Вот мой виджет элемента списка:

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

    construct : function() {
        this.base(arguments);

        var layout = new qx.ui.layout.Grid(4, 2);
        layout.setColumnFlex(1, 1);
        this._setLayout(layout);

        this._createChildControl("icon");
        this._createChildControl("date");
        this._createChildControl("description");
    },

    properties : {
        appearance : {
            refine : true,
            init : "listitem"
        },

        icon : {
            check : "String",
            apply : "_applyIcon",
            nullable : true
        },

        date : {
            check : "String",
            apply : "_applyDate",
            nullable : true
        },

        description : {
            check : "String",
            apply : "_applyDescription",
            nullable : true
        }
    },

    members : {

        _createChildControlImpl : function(id) {
            var control;

            switch (id) {
            case "icon":
                control = new qx.ui.basic.Image(this.getIcon());
                control.setAnonymous(true);
                this._add(control, {
                    row : 0,
                    column : 0,
                    rowSpan : 2
                });
                break;

            case "date":
                control = new qx.ui.basic.Label(this.getDate());
                control.setAnonymous(true);
                this._add(control, {
                    row : 0,
                    column : 2
                });
                break;

            case "description":
                control = new qx.ui.basic.Label(this.getDescription());
                control.setAnonymous(true);
                control.setRich(true);
                this._add(control, {
                    row : 0,
                    column : 1
                });
                break;
            }

            return control || this.base(arguments, id);
        },

        _applyIcon : function(value, old) {
            var icon = this.getChildControl("icon");
            icon.setSource(value);
        },

        _applyDescription : function(value, old) {
            var description = this.getChildControl("description");
            description.setValue(value);
        },

        _applyDate : function(value, old) {
            var date = this.getChildControl("date");
            date.setValue(value);
        }

    },

    destruct : function() {

    }

});

... и вот как я его использую:

this.list = new qx.ui.form.List();
this.listController = new qx.data.controller.List(null, this.list);
this.listController.setDelegate({
    createItem : function() {
        return new project.MyView();
    },

    bindItem : function(controller, item, id) {
        controller.bindProperty("description", "description", null,item, id);
        controller.bindProperty("icon", "icon", null, item, id);
        controller.bindProperty("date", "date", null, item, id);
    },

    configureItem : function(item) {
        item.getChildControl("icon").setWidth(48);
        item.getChildControl("icon").setHeight(48);
        item.getChildControl("icon").setScale(true);
        item.setMinHeight(52);
    }
});

1 Ответ

5 голосов
/ 21 декабря 2010

похоже, что проблема в функции bindItem.Как только вы предоставите свою собственную функцию bindItem, все связанные по умолчанию свойства больше не будут связаны.Это означает, что метка, значок и модель больше не синхронизированы.Я не пробовал ваш код, но, думаю, с простым связыванием модели проблема исчезнет.

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

Это необходимо в том случае, если вы хотите что-то другое в свойстве модели и с этим в вашемвыбор например.Эта строка кода просто использует весь объект как модель, что в большинстве случаев является хорошей идеей.

Best, Martin

...