2012-02-07 2 views
1

qooxdoo에 응용 프로그램을 쓰고 있습니다. 행 정보 (이메일 클라이언트에서와 비슷한 인터페이스)에서 사용자가 클릭 한 데이터 및 위젯과 함께 테이블을 반환해야하는 클래스가 있습니다.html 위젯에서 qooxdoo 값이 업데이트되지 않습니다.

그러나 HTML 임베드 위젯의 정보는 변경되지 않은 후로드 할 때 한 번만 초기화됩니다. html 위젯에서 사용자가 클릭 한 행을 표시하기위한 코드를 다시 작성하는 방법은 무엇입니까? 이 내 코드입니다 : 그 내용을 변경할 수있는 richWidget에 대한

qx.Class.define("bank.InvoiceListBuilder", 
{ 
    extend : qx.core.Object, 
    statics: 
    { 
    createList : function(folder) { 

     var box = new qx.ui.layout.VBox(); 
     box.setSpacing(0); 

     var container = new qx.ui.container.Composite(box); 
     container.setPadding(0); 

     // table construction 
      var data = new qx.data.Array; 
      var invoice = new qx.data.Array; 
      var tableModel = new qx.ui.table.model.Simple(); 
      tableModel.setColumns([ "id", "status", "name", "surname", "date", "email", "amount", "payexp", "description" ]); 
      var rpc = new qx.io.remote.Rpc(
       "http://192.1.1.102/rpc", 
       "mylist" 
      ); 
      var handler = function(result, exc) { 
       if (exc == null) 
       { 
       data = qx.lang.Json.parse(result); 
       tableModel.setData(data); 
       } else { 
       alert("Exception during async call: " + exc); 
       } 
      }; 
      rpc.callAsync(handler, "listings", folder); 
      var table = new qx.ui.table.Table(tableModel); 
      var rowcontent = function(e) 
      { 
       var row = table.getFocusedRow(); 
       invoice = tableModel.getRowData(row); 
       console.log(invoice); 
      }; 
      table.addListener('cellClick', rowcontent, this);   
      table.getTableColumnModel().setColumnVisible(1, false);     
      table.setShowCellFocusIndicator(false); 
      table.setHeight(300); 
      container.add(table); 

      // invoice content view 
      var rich = new qx.util.StringBuilder(); 

      if (invoice[2] == null) 
      { 
       rich.add("<b>Text</b>"); 
      } else { 
       rich.add("<b>",invoice[2],"</b>"); 
      } 
      var richWidget = new qx.ui.embed.Html(rich.get()); 
      console.log(rich.get()); 
      console.log(invoice[3]); 
      richWidget.setOverflow("auto", "auto"); 
      richWidget.setDecorator("main"); 
      richWidget.setBackgroundColor("white"); 
      richWidget.setWidth(200); 
      richWidget.setHeight(300);   
      container.add(richWidget); 

      return(container); 
    } 
    } 

답변

1

, 당신은 실제로 그것을 업데이트해야합니다. 배열의 값을 변경해도 여기에는 아무런 영향이 없습니다 ... (배열이 qooxdoo Array 객체이고 데이터 바인딩을 사용하고 있다면 ...). 어떤 경우에, 당신은 당신의 RPC 콜백에서 setData를 호출하는 것과 같은 방법으로, 당신은 두 번째 콜백에서 다양한 위젯을 setHtml 전화를해야 :하지만 더있다

var richWidget = new qx.ui.embed.Html(); 
var rowcontent = function(e) { 
    var row = table.getFocusedRow(); 
    var invoice = tableModel.getRowData(row); 
    var rich = new qx.util.StringBuilder(); 
    if (invoice[2] == null) { 
     rich.add("<b>Text</b>"); 
    } else { 
     rich.add("<b>",invoice[2],"</b>"); 
    } 
    richWidget.setHtml(rich.get()); 
}; 

. 정적 함수를 만드는 대신 qx.ui.container.Composite 위젯에 기반하여 구현을 제안한 다음 new bank.InvoiceList()을 사용하여 코드를 인스턴스화하는 것이 좋습니다. (이것은 기능에 영향을주지는 않지만 '옳은 일'입니다.)

+0

답변 주셔서 감사합니다! 매력처럼 작동합니다! :) 그리고 Composite에 대한 제안에 감사드립니다. – liberatio

+0

이제 올바른 대답을 수락하면 상황이 훨씬 나아질 것입니다 :-) –