2012-02-07 19 views
1

私はqooxdooにアプリケーションを書いています。私は行情報(電子メールクライアントの場合と同様のインターフェイス)でユーザーがクリックしてデータとウィジェットを持つテーブルを返すクラスを持っています。qooxdooの値がhtmlウィジェットで更新されない

しかし、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を呼び出しているのと同じ方法で、あなたは、2番目のコールバックであなたの豊富なウィジェットを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

回答ありがとうございました!魅力的な作品です!:)そしてコンポジットの提案に感謝します。 – liberatio

+0

あなたが正しい答えを受け入れるなら、物事はもっと良く見えます:-) –

関連する問題