更改brightscript的roAssociativeArray中某个字段的值
Change the value of a field in roAssociativeArray of brightscript
我创建了任务,并在用户按下视频资产上的观看按钮时 运行 它(以获取视频详细信息)。我能够 运行 任务并从服务器获取播放详细信息。获取播放详细信息后,我需要每 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() 中,我试图将 playbackDetails 中的 streamToken 值更改为 heartbeatContent 的 streamToken。但是值没有改变。
playbackDetails 和 heartbeatContent 是我在 XML 文件中定义的 roAssociativeArrays,设置值如下。
<?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>
任何人都可以建议我如何更改播放详细信息中的字段值吗?
作为节点字段的关联数组是不可变的,这意味着它们的内容无法更改。
您必须覆盖整个对象:
playbackDetails = m.livePlaybackNode.playbackDetails
playbackDetails.streamToken = m.heartbeatNode.heartbeatContent.streamToken
m.livePlaybackNode.playbackDetails = playbackDetails
或者您可以使用节点而不是关联数组。
我创建了任务,并在用户按下视频资产上的观看按钮时 运行 它(以获取视频详细信息)。我能够 运行 任务并从服务器获取播放详细信息。获取播放详细信息后,我需要每 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() 中,我试图将 playbackDetails 中的 streamToken 值更改为 heartbeatContent 的 streamToken。但是值没有改变。
playbackDetails 和 heartbeatContent 是我在 XML 文件中定义的 roAssociativeArrays,设置值如下。
<?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>
任何人都可以建议我如何更改播放详细信息中的字段值吗?
作为节点字段的关联数组是不可变的,这意味着它们的内容无法更改。
您必须覆盖整个对象:
playbackDetails = m.livePlaybackNode.playbackDetails
playbackDetails.streamToken = m.heartbeatNode.heartbeatContent.streamToken
m.livePlaybackNode.playbackDetails = playbackDetails
或者您可以使用节点而不是关联数组。