2014-09-03 226 views
0

按鈕,我有如下一個JavaScript代碼:禁用選項/在使用JavasScript

p.onRowSelectExtraListener = function(e) 
{ 
    var that = e.data.that; 

    that.actions.selectedRows = that.table.getSelectedRows(); 
    var selected = []; 
    var disableoption = false; 
    $('#checkboxes input:checked').each(function() { 
     selected.push($(this).attr('statusid')); 
    }); 

    $.each(selected, function(index, value) { 
     if (value == 27) 
     { 
      disableoption = true; 
      return false; 
     } 
     console.log(disableoption); 
     if(disableoption === true) 
      { 
      console.log("calling another function"); 
      //call p.getRowActions and disable the 3rd menu item/button.option. 
      } 
    }); 
}; 

p.getRowActions = function() 
{ 
    var that = this; 
    var addToGroupOptions = this.data.group.slice(0); 
    console.log("in get row actions"); 
    if (this.canUnlock == 0) 
     { 
      console.log("In Super-IF loop"); 
     } 

    addToGroupOptions.unshift({id: 'new', name: 'new group'}); 
       //TODO translate 
       return [ 
        { 
         option: {id: '4', name: 'add to group'}, 
         options: addToGroupOptions, 
         type: 'ajax', 
         func: function(selectedRows, group) 
         { 
          that.onAddToGroup(selectedRows, group); 
         } 
        }, 
        { 
         option: {id: '2', name: 'change rights issue'}, 
         type: 'ajax', 
         func: function(selectedRows, rights) { 
          that.onChangeRights(selectedRows, rights); 
         } 
        }, 
        { 
         option: {id: '1', name: 'change status'}, 
         options: this.data.status, 
         type: 'ajax', 
         func: function(selectedRows, status) { 
          that.onChangeStatus(selectedRows, status); 
         } 
        }, 
        { 
         option: {id: '3', name: 'edit'}, 
         type: 'ajax', 
         func: function(selectedRows, edit) { 
          that.onChangeEdit(selectedRows, edit); 
         } 
        } 
       ]; 
}; 

現在出了這兩個功能,第二個叫/第一次執行時,我打開我的網頁。 因此,我可以看到console.log("in get row actions");打印以及在return[]聲明下的4個選項作爲我應用程序中的按鈕顯示。

現在,我的要求是:

要禁用第三選項(使用ID選項:1名:每當disableoption = true將在第一功能進行設置更改狀態

怎麼可能

我怎樣才能提前訪問和消除不同勢函數中定義的屬性?

感謝。

回答

1

p.getRowActions返回一個數組,訪問數組中的對象並更改所需對象的屬性,一旦對象被修改,您可以重新組裝帶有新對象的數組(https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/splice),然後將此更正爲數組消費其數據以將HTML對象添加到DOM的組件。

另一種選擇是在接收陣列的功能的端部插入一個回調函數從p.getRowActions返回所以你可以它被創建/渲染後的DOM 編輯對象。

UPDATE(僞代碼來說明解決方案):

function some_function_that_consumes_getRowActions_that_is_somewhere_else_that_I_dont_know() { 
    var arrayOfHTMLOptions = p.getRowActions(); 

    //inserting options to DOM... 

    var theOptionYouWant = document.getElementById('1'); 
    theOptionYouWant.disabled = true; 
} 

另一種選擇(這可能是因潛在的即將到來的使用情況,可能需要對這個功能的新變化更優雅)是通過繼承覆蓋對象「p」的方法並構建自己的p.getRowActions返回所需的選項數組,然後您必須更新接收此數組的函數,以便它可以指向新的「p子對象」,通過這樣做有一個更靈活的方式來保持變化p.getRowActions

這裏的面向對象編程的JavaScript對象上的一些很酷閱讀: http://marcelorjava.wordpress.com/2014/06/07/object-oriented-programming-with-java-and-javascript/

+0

感謝您的幫助@Marcelor。 我理解你的意思說理論。 你可以請我提供在我的情況下的實施代碼,因爲我對Javascript天真。 – mmt 2014-09-03 10:23:40