2013-03-06 8 views
4

Я построил TreeGrid со встроенным флажком в колонке «Имя», такие как JSON данные:TreeGrid как проверить/снимите все дочерние подуровня флажков, когда метка родитель

{"id":"1","name":"<input type='checkbox' class='itmchk' ><strong>ECHANGEUR<\/strong>","level":"0","parent":"null","isLeaf":false,"expanded":true,"loaded":true} 

, потому что эти флажки следуют полям дерева (я надеюсь, Я прекрасно понимаю, потому что я французский).

Я хочу проверить/снять флажки на уровне подуровней, когда я отмечаю/удаляю одну строку, но после чтения сообщений может получить ожидаемый результат.

Пояснения к примеру: Если я нажимаю на родительской строке флажке (так он стал непроверенным), подуровень ряды становятся UNCHECKED

Я новичок с jqGrid, но это отличный инструмент, которого я хочу узнать свойство. Пожалуйста, вы можете отвезти меня таким образом? Или вы можете предложить, где я могу найти примеры, которые я хочу сделать? Я искал документацию, но безуспешно.

Большое спасибо заранее JiheL

ответ

5

Прежде всего я рекомендую вам не размещать фрагменты HTML внутри данных JSON. Можно использовать custom formatter включить флажки внутри ячеек сетки:

formatter: function (cellvalue) { 
    return "<input type='checkbox' class='itmchk' ><strong>" + 
     $.jgrid.htmlEncode(cellvalue) + "</strong>"; 
} 

Для контроля проверки/Непроверки флажков вы можете использовать beforeSelectRow дозвон сетки. jqGrid привязано внутренне click событие к телу сетки. Таким образом, обработчик событий не существует непосредственно на элементе event bubbling. Это позволяет уловить проверку/снятие отметки любых флажков внутри одного beforeSelectRow обратного вызова. Внутри beforeSelectRow вы должны сначала проверить, был ли он щелчок на флажке, который вы хотите контролировать.

Обратный звонок beforeSelectRow имеет два параметра: rowid и event object. Свойством target объекта события будет элемент DOM, который был нажат пользователем. Поскольку вы добавляете свой собственный класс itmchk к каждому из таких флажков, этого будет достаточно, чтобы проверить класс на клике.

Следующая проблема заключается в том, что многие методы jqGrid, которые работают с TreeGrid, такие как getNodeChildren, имеют record в качестве входного параметра, но вместо этого у вас есть только rowid. jqGrid сохраняет загруженные элементы сетки локально. Таким образом, самый простой способ получить record от rowid - использовать метод getLocalRow.

В результате код beforeSelectRow обратного вызова может быть следующим:

beforeSelectRow: function (rowid, e) { 
    var $this = $(this), 
     isLeafName = $this.jqGrid("getGridParam", "treeReader").leaf_field, 
     localIdName = $this.jqGrid("getGridParam", "localReader").id, 
     localData, 
     state, 
     setChechedStateOfChildrenItems = function (children) { 
      $.each(children, function() { 
       $("#" + this[localIdName] + " input.itmchk").prop("checked", state); 
       if (!this[isLeafName]) { 
        setChechedStateOfChildrenItems($this.jqGrid("getNodeChildren", this)); 
       } 
      }); 
     }; 
    if (e.target.nodeName === "INPUT" && $(e.target).hasClass("itmchk")) { 
     state = $(e.target).prop("checked"); 
     localData = $this.jqGrid("getLocalRow", rowid); 
     setChechedStateOfChildrenItems($this.jqGrid("getNodeChildren", localData), state); 
    } 
} 

Важно отметить, что дети флажки будут проверены/снято только на предварительно нагруженные элементах. Поскольку вы загружаете данные сетки сразу и используете свойство loaded: true, это не проблема для вас.

Соответствие demo показывает, что приведенный выше код действительно работает. Это модификация демо, которую я создал, отвечая на ваш предыдущий вопрос.

+0

Я очень благодарю вас за вашу помощь, вы, безусловно, мастер с jqGrid, поскольку вы знаете много чего об этом. Еще раз спасибо за то, что вы делитесь с новыми пользователями.Я больше не буду вас беспокоить, но, следуя приведенному выше вопросу, я не говорю о переключателе, который иногда заменяет флажки в соответствии с значением уровня базы данных. Есть ли способ проверить значение другой ячейки в форматировании, чтобы я мог выбрать переключатель или флажок для добавления в ячейку? Я думаю, что это уровень новичка, но я не понимаю, как это сделать. В очередной раз благодарим за помощь. JiheL – JiheL

+0

Пожалуйста, не тратьте время на мой предыдущий комментарий, я нашел решение заменить флажок radobutton на значение уровня из базы данных. Еще раз спасибо за ваше терпение. Имейте хороший день JiheL – JiheL

+0

@ user2132268: Добро пожаловать! – Oleg