Проблема с областью в JS: Uncaught TypeError: Object # <a Object> не имеет метода 'createDocumentFragment' - PullRequest
1 голос
/ 05 октября 2010

Я пытаюсь сделать инструмент для упрощения работы со сложными сетками из jqGrid , функции, которая могла бы читать схемы сеток, но, похоже, мне не хватает навыков JS для этого)

function renderGridSystemRecursively(scheme, container){

// CHILDREN
    if ('children' in scheme && scheme.children.length > 0) {
        scheme.prm.gridPrm.subGrid = true
        scheme.prm.gridPrm.subGridRowExpanded = function (expandedRowContainer_id, parent_dataitem_id) {

            var hiddenAtStart = (scheme.children.length > 1) ? true : false
            for (var i in scheme.children) {
                var child = scheme.children[i]
                if ('scheme' in child) {

// NEXT LINE CAUSES ERROR 
// Uncaught TypeError: Object #<an Object> has no method 'createDocumentFragment'
                    var subcontainer = $('<div style="float: left;"/>',{id:expandedRowContainer_id+'_'+child.subId})
                    container.append(subcontainer)

                    child.scheme.hiddengrid = (child.scheme.hiddengrid == undefined) ? hiddenAtStart : child.scheme.hiddengrid

                    var self = $('#'+subcontainer.attr('id')+'_grid')
                    child.scheme.prm = child.scheme.prmInit(parent_dataitem_id, self)
                    child.scheme.prm.navMode = 'subgrid'
                    renderGridSystemRecursively(child.scheme, subcontainer)
                }
            }
        }
    }
//...

    renderGrid(scheme.prm, container, scheme.prm.navMode)
}

Определение функции находится в отдельном файле и находится в глобальной области видимости. Функция вызывается за пределами ready (), но в обработчике событий subGridRowExpanded возникает ошибка, поэтому похоже, что я напутал с замыканиями, не могу понять, как именно.

Я не использую никакую другую библиотеку, кроме jquery.

Ответы [ 2 ]

2 голосов
/ 05 октября 2010

Ваш синтаксис немного отключен, у вас не может быть элементов со встроенными свойствами и объекта свойств (или событий), переданных при использовании $(html, props).Итак, это:

 $('<div style="float: left;"/>',{id:expandedRowContainer_id+'_'+child.subId})

Должно быть что-то вроде этого:

 $('<div />',{id:expandedRowContainer_id+'_'+child.subId, css:{float:'left'}})
1 голос
/ 05 октября 2010

Полагаю, вам нравится делать следующее:

var subcontainer = $('<div style="float: left;"/>').attr({id:expandedRowContainer_id+'_'+child.subId});

createDocumentFragment () - это метод документа.

$('<div style="float: left;"/>')

... создаст новый DocumentFragment.Если вы укажете второй параметр, этот параметр будет принят в качестве контекста (должен быть документом, а не тем, что есть на самом деле).Это вызывает ошибку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...