2014-09-03 5 views
0

У меня есть яваскрипт код, как показано ниже:Отключения опции/кнопка в 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");, а также 4 варианта под return[] заявление, представленное как кнопки в моем приложении.

Теперь мое требование:

Чтобы отключить 3-й вариант (вариант с идентификатором: 1. Имя: статус изменения всякий раз, когда disableoption = true будет установлен в 1-й функции

Как это возможно

?

Как я могу получить доступ и удалить свойство, определенное в diffrent функции?

Спасибо заранее.

ответ

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

Смежные вопросы