Попытка добавить еще одного дочернего элемента в getContent() в узле задачи

#roku #brightscript

#roku #brightscript

Вопрос:

Я следую CustomGrid_ContentManager из примера SGGraph. Здесь ниже функция для получения контента из ленты.

 sub GetContent()
    feed = ReadAsciiFile("pkg:/images/Response.json")
    if feed.Len() > 0
        json = ParseJson(feed)
        if json <> invalid and json.rows <> invalid and json.rows.Count() > 0
            rootChildren = {
                children: []
            }
           for each row in json.rows
               if row.items <> invalid
                   rowAA = {
                       children: []
                   }
                 for each item in row.items
                     rowAA.children.Push(item)
                end for
                rowAA.Append({ title: row.title })
               rootChildren.children.Push(rowAA)
            end if
       end for
       m.top.content.Update(rootChildren)
      end if
   end if
end sub
  

И я получаю доступ к ответу, используя основную сцену, как показано ниже :

 m.grid.content.GetChild(0).GetChild(0)
  

Здесь я пытаюсь добавить еще одного дочернего элемента в getContent() и получить доступ к использованию в основной сцене, как показано ниже.

 m.grid.content.GetChild(0).GetChild(0).GetChild(0)
  

Но не повезло. Каждый раз обнаруживаются недопустимые данные. Я пытаюсь использовать приведенный ниже код для . Кто-нибудь дает предложения, как это сделать?

 sub GetContent()
    feed = ReadAsciiFile("pkg:/images/Response.json")
    if feed.Len() > 0
        json = ParseJson(feed)
        if json <> invalid and json.rows <> invalid and json.rows.Count() > 0
            rootChildren = {
                children: []
            }
            ' 'First Way Here I added extra Node 
            ' rowNode = {
            ' children: []
            ' }

            ' 'Second Way Here I added extra Node 
            ' rootChildren = {
            '    children: {
            '      rowNode : []
            '    }
            ' }

           for each row in json.rows
               if row.items <> invalid
                   rowAA = {
                       children: []
                   }
                 for each item in row.items
                    'First way using a for loop
                    ' for each nik in item.items
                    '     rowNode.children.Push(nik)
                    ' end for
                    ' rowAA.children.Push(rowNode) ' But Here not maintain item value for first node

                    ' 'Second way I tried with directly addd
                    ' rootChildren.children.rowNode.Push(item.items) 'But here It's give and error
                     rowAA.children.Push(item)
                end for
                rowAA.Append({ title: row.title }) 'Here Second Way It's give a error not update data here
               rootChildren.children.Push(rowAA)
            end if
       end for
       m.top.content.Update(rootChildren)
      end if
   end if
end sub
  

Комментарии:

1. Вы пытаетесь получить содержимое до того, как представление было показано с помощью ComponentController? Пожалуйста, предоставьте информацию, где вы пытаетесь получить контент в своей основной сцене.

2. @hornyhedgehog да

Ответ №1:

На самом деле SGDEX Content Manager подключается к просмотру только после того, как он был показан с помощью ComponentController. Только после этого ваша задача Content Manager запустит выполнение функции getContent() вашего ContentHandler. Попробуйте получить содержимое после показа представления.

Комментарии:

1. Да, эту штуку я знаю. Но я пытаюсь добавить еще одного дочернего элемента в мой getContent(), который расширяется с помощью ContentHandler. Итак, я могу получить доступ к этому дочернему элементу в главной сцене. Это то же самое, что и компонент списка строк (в списке строк один дочерний элемент для заголовка и второй для содержимого). Мне нужен был третий ребенок.

2. Похоже, вы используете корневую модель загрузки содержимого и пытаетесь получить содержимое до его установки. Видна ли сетка в тот момент, когда вы пытаетесь получить дочерний элемент контента? Или спиннер виден в этот момент? Это важно, потому что ContentHandler выполняется в другом потоке, так что вы можете получить условие гонки.

3. Сначала я не смог создать дочернего элемента. Я пробую два способа, как упоминалось в вопросе. Сетка не отображается, когда я извлекаю содержимое (это означает создание дочернего элемента). Это видно, когда я обращаюсь к содержимому.

4. Не могли бы вы предоставить образец вашего канала JSON, чтобы я мог попробовать его локально?

5. Первое, что я обнаружил, это то, что вы наблюдаете rowItemFocused, а не rowItemSelected. Ожидается ли это? Если вы добавите тот же псевдоним для rowItemSelected, он будет работать так, как ожидалось.