2014-09-03 214 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