2009-12-15 80 views
0

我在面板对话框中有一个数据表。数据表显示ok ...但是....没有事件正在注册,喜欢排序,行选择等等。不是香肠。如果数据表不在面板内,那么行选择,排序等工作就会很好。YUI数据表在面板中没有注册事件

这是我的代码。如果你能指引我朝着正确的方向,我将永远感激不尽。

YAHOO.util.Event.addListener(window, "load", function(){ 
function processPostpone(e) 
{ 
     var dom = YAHOO.util.Dom; 
     if(dom.get("user_rejected").value==3) 
     { 
      window.alert(dom.get("user_rejected_impossible").value); 
     } 
     else 
     { 
      var elTarget = YAHOO.util.Event.getTarget(e);  
      var attendance_id = elTarget.id; 
      attendance_id = attendance_id.substring(7, 15); 
      var handleYes = function() { 
       // postpone session 
       var callback = { 
        success : function(o) 
        { 
         if(o.responseText=="true") 
         { 
          // succesfully postponed session 
          var callback2 = 
          { 
            success: function(o) 
            { 
             try 
             { 
              messages = YAHOO.lang.JSON.parse(o.responseText); 
             } 
             catch (x) 
             { 
              alert("JSON Parse failed!"); 
              return; 
             } 
             if(messages.ResultSet.count > 0) 
             { 
              // there are some other available sessions 
              var columndefs = [ 
                   {key:"name", label: "Session", sortable:false, resizeable:false}, 
                   {key:"location", label: "Location", sortable:false, resizeable:false}, 
                   {key:"start_date", label: "Start Date", sortable:false, resizeable:false} 
                  ]; 

              var datasource = new YAHOO.util.DataSource(messages); 
              datasource.responseType = YAHOO.util.DataSource.TYPE_JSON; 
              datasource.responseSchema = { 
                resultsList: "ResultSet.Result", 
                fields: ["name","location","start_date"] 
              }; 

              var datatable = new YAHOO.widget.DataTable("possibleSessionsDataTable", columndefs, datasource, {rowSingleSelect:true, zindex:999}); 
              datatable.subscribe("rowMouseoverEvent", datatable.onEventHighlightRow); 
              datatable.subscribe("rowMouseoutEvent", datatable.onEventUnhighlightRow); 
              datatable.subscribe("rowClickEvent", datatable.onEventSelectRow); 
              datatable.focus(); 

              var handleSubmit = function() { 
               // test 
               alert('You clicked submit'); 
              } 

              var panel = new YAHOO.widget.Panel("panel2", { width:"600px", visible:false, modal: false, fixedCenter: true, draggable:false, close:false }); 
              panel.setHeader("Other Sessions You May Be Able To Attend"); 
              panel.setBody(dom.get("other_possible_sessions").innerHTML); 
              panel.setFooter('<div id="panelFooter"></div>'); 

              panel.showEvent.subscribe(function() { 
               var button1 = new YAHOO.widget.Button({ 
                type: 'button', 
                label: 'Submit', 
                container: 'panelFooter' 
               });               
               button1.on("click", handleSubmit); 
              }, panel, true); 

              panel.render("container"); 
              panel.show(); 
             } 
            }, 
            failure: function(o) 
            { 

            } 
           } 
           var conn = YAHOO.util.Connect.asyncRequest("POST", "/ajax/possiblesessions.json?id=" + attendance_id, callback2); 
          } 
          else 
          { 
           window.alert("Sorry, there was an error."); 
          } 
         }, 
         failure : function(o) 
         { 
          window.alert("Sorry, there was an error."); 
         } 
        } 
       var conn = YAHOO.util.Connect.asyncRequest("POST", "/ajax/postponesession.json?id=" + attendance_id, callback); 

       var loading = new YAHOO.widget.Panel("wait", 
         { width:"300px", 
          fixedcenter:true, 
          close:false, 
          draggable:true, 
          zindex:4, 
          modal:false, 
          visible:false 
         } 
        ); 
      this.hide(); 

      /*loading.setHeader("Rejecting session..."); 
      loading.setBody('<img src="http://l.yimg.com/a/i/us/per/gr/gp/rel_interstitial_loading.gif" />'); 
      loading.render(document.body); 
      loading.show();*/ 
      }; 

      var handleNo = function() { 
       this.hide(); 
      }; 

      var dialog = new YAHOO.widget.SimpleDialog("dialog", 
         { width: "300px", 
          fixedcenter: true, 
          visible: false, 
          draggable: false, 
          close: true, 
          text: document.getElementById("reject_alert_text").innerHTML, 
          modal: false, 
          icon: YAHOO.widget.SimpleDialog.ICON_HELP, 
          constraintoviewport: true, 
          buttons: [ { text:"Yes", handler:handleYes, isDefault:true }, 
             { text:"No", handler:handleNo } ] 
         }); 
      dialog.setHeader("Reject session?"); 
      // Render the Dialog 
      dialog.render(document.body); 
      dialog.show(); 
     } 
} 
// create postpone button 
var elms = YAHOO.util.Dom.getElementsByClassName("reject"); 

// loop over all the elements and attach a click event 
for(var i=0,j=elms.length;i<j;i++) 
{ 
    var el = document.getElementById(elms[i].id); 
    YAHOO.util.Event.addListener(el, "click", processPostpone); 
} 

var tabView = new YAHOO.widget.TabView('tabs'); 

});

我为长码片断表示歉意。

预先感谢您。

回答

1

尽管我无法从您提供的代码片段中确切地知道问题,但我会采取合理的猜测,并建议您可能正在处理范围问题。

换句话说,可能不是没有事件被触发,而是附加到它们的函数超出范围,或者由于超出范围变量而导致函数中的回调失败。 (YUI有时可以通过事件来抑制错误)

很多yui函数都有第三个和第四个参数让我们指定回调在其中执行的范围。

obj.subscribe("onEvent", this.onEvent, this, true); 

上面的代码片段将onEvent中的'this'设置为当前值,可能是当前对象。

我会首先看看您的回调函数执行的范围。尝试console.log(this);你可能会发现这不是你所期待的。

+0

非常好。我会放弃这一点。非常感谢你:-) – Flukey 2009-12-16 13:32:39

+0

因此增加了一个范围: \t \t \t \t \t \t \t \t datatable.subscribe( “radioClickEvent” 功能(oArgs){ \t \t \t \t \t \t \t警报('你好单选按钮点击!'); \t \t \t \t \t \t \t},panel,true); 但是,唉,即使范围是为面板....它不喜欢它:-(我非常困惑和恼火。谢谢:-) – Flukey 2009-12-16 14:03:42

+0

杰米,只是想知道如果你曾经解决过这个问题?我正在面对类似的问题,在一个yui3标签视图内的tableView中表现得有点奇怪。谢谢 - 巴特 – 2010-07-28 21:04:05