#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, он будет работать так, как ожидалось.