2010-12-20 3 views
4

사용자 정의 listitem보기를 작성했습니다 (기반은 http://news.qooxdoo.org/tutorial-part-4-2-custom-widgets-4).qooxdoo - 사용자 정의 목록 위젯 선택

이 목록의 선택 항목에 문제가 있습니다. 첫 번째 요소는 항상 선택됩니다 (목록에서 어떤 요소를 클릭하든 관계 없음).

문제를 해결하려면 어떻게해야합니까? 내가 그것을 사용하는 방법 여기

 
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() { 

    } 

}); 

... 그리고 : : 문제는 bindItem 함수처럼

 
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); 
    } 
}); 

답변

5

보이는

여기 내 목록 항목 위젯입니다. 직접 bindItem 함수를 제공하면 모든 기본 바인딩 된 속성은 더 이상 바인딩되지 않습니다. 이는 lable, 아이콘 및 모델이 더 이상 동기화되지 않음을 의미합니다. 내가 당신에게 코드를 시도 havent하지만 모델의 간단한 바인딩으로 추측, 문제는 사라질 것입니다.

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

모델 속성과 다른 항목 (예 : 선택 항목)을 원할 경우이 기능이 필요합니다. 이 코드 라인은 대부분의 경우 좋은 아이디어 인 모델로 전체 객체를 사용합니다.

최고, 마틴

+0

감사합니다. – tchudyk