Измените значение поля в roAssociativeArray из brightscript - PullRequest
0 голосов
/ 30 октября 2018

Я создал задачу и запустил ее (чтобы получить подробности видео), когда пользователь нажимает кнопку просмотра на активе видео. Я могу запустить задачу и получить информацию о воспроизведении с сервера. После получения информации об игре мне нужно запускать таймер каждые 30 секунд, и после его запуска мне нужно запустить еще одну задачу, чтобы обновить тактовый сигнал на сервере. После получения ответа на сердцебиение мне нужно обновить одно поле сведений о воспроизведении значением ответа на сердцебиение. Несмотря на то, что я изменил значение поля с помощью addReplace (), значение не изменяется.

scene.brs

sub playLive()
    m.livePlaybackData = CreateObject("roSGNode", "FetchPlaybackDetails")
    m.livePlaybackNode.observeField("playbackDetails", "didReceivePlaybackDetails")     
    m.livePlaybackNode.control = "RUN"  
end sub

sub didReceivePlaybackDetails()
    videoContent = createObject("RoSGNode", "ContentNode")
    videoContent.url = m.livePlaybackNode.playbackDetails.pUrl
    videoContent.title = "Test Video"
    videoContent.streamformat = "dash"

    m.video.content = videoContent
    m.video.visible = true
    m.video.setFocus(true)
    m.video.control = "play"
    m.video.observeField("state", "OnVideoPlayerStateChange")
    m.playbackHeartbeatTimer.control = "start"
    m.playbackHeartbeatTimer.ObserveField("fire","updateHeartbeat")
end sub

sub updateHeartbeat()
    m.heartbeatNode.setField("liveStreamToken", m.livePlaybackNode.playbackDetails.streamToken)
    m.heartbeatNode.observeField("heartbeatContent", "didReceiveHeartbeatContent")
    m.heartbeatNode.control = "RUN"
end sub

sub didReceiveHeartbeatContent()
    m.livePlaybackNode.playbackDetails.AddReplace("streamToken", m.heartbeatNode.heartbeatContent.streamToken)
    ?m.livePlaybackNode.playbackDetails.streamToken
end sub

В didReceiveHeartbeatContent () я пытаюсь изменить значение streamToken в PlayDetails с помощью streamToken из heartbeatContent. Но значение не меняется.

translationDetails и heartbeatContent - это roAssociativeArrays, которые я определил в файлах XML и установил значения, как показано ниже.

<?xml version="1.0" encoding="utf-8" ?>

<component name = "FetchPlaybackDetails" extends = "Task" >

<interface>
    <field id="playbackDetails" type="assocarray" />
</interface>
</component>

<?xml version="1.0" encoding="utf-8" ?>

<component name = "UpdateHeartbeat" extends = "Task" >

<interface>
    <field id="liveStreamToken" type="string" />
    <field id="heartbeatContent" type="assocarray" />
</interface>

</component>

Может ли кто-нибудь подсказать, пожалуйста, как изменить значение поля в воспроизведении деталей?

1 Ответ

0 голосов
/ 04 ноября 2018

Ассоциативные массивы как поля узлов являются неизменными, что означает, что их содержимое не может быть изменено.

Вам придется переопределить весь объект:

playbackDetails = m.livePlaybackNode.playbackDetails
playbackDetails.streamToken = m.heartbeatNode.heartbeatContent.streamToken
m.livePlaybackNode.playbackDetails = playbackDetails

Или вы можете использовать узлы вместо ассоциативных массивов.

...