【发布时间】:2023-03-05 16:07:01
【问题描述】:
我们正在为位于不同位置的工业工厂构建网络可视化。目前,我们为概览页面使用表格布局。每行代表一种植物及其最重要的状态和价值。
现在需要交替显示带有标记的地图。每个标记的颜色应代表当前状态(绿色=正常、红色=错误、黄色=警告等)。
在我们当前基于表格的页面中,我们使用 knockout.js 将视图模型中的单个植物属性绑定到表格行(以及其中相应的 div 等)。每当状态或值发生变化时,视图模型的值都会通过信号器更新,因此您可以将其视为植物状态的实时、基于事件的表示。
由于这个视图模型已经包含我们需要在地图上显示的所有信息,我想将传单标记绑定到视图模型,但我看不到如何做到这一点。问题是没有可以与data-bind 属性一起使用的标记元素。
确切地说:我可以为每个植物添加(静态)标记,这不是问题,但我不能将它们数据绑定到视图模型以动态表示视图模型中的变化值。有没有办法做到这一点?
我真的很想继续使用传单,因为它完全符合我们的需求。 Web 应用程序需要在与 Internet 永久断开连接的特殊网络中运行,因此我们需要提供我们自己的图块(这与传单和 Maperetive 配合得很好)。如果传单以外的其他解决方案可以满足我们的需求,也请告诉我。谢谢!
更新:这是我的视图模型的实际 json 数据。每行代表一个站。每个站点的纬度/经度还没有添加,但我猜这个问题可以忽略不计。
{
"Rows":[
{
"StationId":1,
"Text":"MCU SE (SE 1/1) DAE",
"IsDialInStation":false,
"ConnectState":{
"StationId":1,
"DpId":14,
"Name":null,
"Value":1,
"TimeStamp":"\/Date(1400149092000)\/"
},
"ConnectStateText":"Nicht verbunden. Hier klicken für Anwahl!",
"HasActualData":{
"StationId":1,
"DpId":10,
"Name":null,
"Value":1,
"TimeStamp":"\/Date(1404890137000)\/"
},
"Anlage":{
"StationId":1,
"DpId":20101,
"Name":"Anlage",
"Value":1,
"TimeStamp":"\/Date(-62135596800000)\/"
},
"cmdSchalteAnlage":{
"StationId":1,
"DpId":20013,
"Name":"cmdAnlage",
"Value":0,
"TimeStamp":"\/Date(-62135596800000)\/"
},
"Kurzzeit":{
"StationId":1,
"DpId":20104,
"Name":"Kurzzeit",
"Value":0,
"TimeStamp":"\/Date(-62135596800000)\/"
},
"cmdSchalteKurzzeit":{
"StationId":1,
"DpId":20012,
"Name":"cmdKurzzeit",
"Value":0,
"TimeStamp":"\/Date(-62135596800000)\/"
},
"Handbetrieb":{
"StationId":1,
"DpId":20160,
"Name":"Handbetrieb",
"Value":0,
"TimeStamp":"\/Date(-62135596800000)\/"
},
"Betriebsbereit":{
"StationId":1,
"DpId":20121,
"Name":"Betriebsbereit",
"Value":1,
"TimeStamp":"\/Date(-62135596800000)\/"
},
"Heizt":{
"StationId":1,
"DpId":20451,
"Name":"Heizt",
"Value":0,
"TimeStamp":"\/Date(-62135596800000)\/"
},
"Sammelstoerung":{
"StationId":1,
"DpId":20140,
"Name":"Sammelstoerung",
"Value":0,
"TimeStamp":"\/Date(-62135596800000)\/"
},
"SammelstoerungTechnisch":{
"StationId":1,
"DpId":20129,
"Name":"SammelstoerungTechnisch",
"Value":0,
"TimeStamp":"\/Date(-62135596800000)\/"
},
"KommunikationsStoerung":{
"StationId":1,
"DpId":20138,
"Name":"KommunikationsStoerung",
"Value":0,
"TimeStamp":"\/Date(-62135596800000)\/"
},
"KommunikationsStoerungKE":{
"StationId":1,
"DpId":20137,
"Name":"KommunikationsStoerungKE",
"Value":0,
"TimeStamp":"\/Date(-62135596800000)\/"
},
"AllowCommands":true,
"AllowParameters":true
},
{
"StationId":2,
"Text":"MCU SE (SE 2/1) Turm",
"IsDialInStation":false,
"ConnectState":{
"StationId":2,
"DpId":14,
"Name":null,
"Value":1,
"TimeStamp":"\/Date(1402984603000)\/"
},
"ConnectStateText":"Nicht verbunden. Hier klicken für Anwahl!",
"HasActualData":{
"StationId":2,
"DpId":10,
"Name":null,
"Value":1,
"TimeStamp":"\/Date(1404890136000)\/"
},
"Anlage":{
"StationId":2,
"DpId":20101,
"Name":"Anlage",
"Value":1,
"TimeStamp":"\/Date(-62135596800000)\/"
},
"cmdSchalteAnlage":{
"StationId":2,
"DpId":20013,
"Name":"cmdAnlage",
"Value":0,
"TimeStamp":"\/Date(-62135596800000)\/"
},
"Kurzzeit":{
"StationId":2,
"DpId":20104,
"Name":"Kurzzeit",
"Value":0,
"TimeStamp":"\/Date(-62135596800000)\/"
},
"cmdSchalteKurzzeit":{
"StationId":2,
"DpId":20012,
"Name":"cmdKurzzeit",
"Value":0,
"TimeStamp":"\/Date(-62135596800000)\/"
},
"Handbetrieb":{
"StationId":2,
"DpId":20160,
"Name":"Handbetrieb",
"Value":0,
"TimeStamp":"\/Date(-62135596800000)\/"
},
"Betriebsbereit":{
"StationId":2,
"DpId":20121,
"Name":"Betriebsbereit",
"Value":1,
"TimeStamp":"\/Date(-62135596800000)\/"
},
"Heizt":{
"StationId":2,
"DpId":20451,
"Name":"Heizt",
"Value":0,
"TimeStamp":"\/Date(-62135596800000)\/"
},
"Sammelstoerung":{
"StationId":2,
"DpId":20140,
"Name":"Sammelstoerung",
"Value":0,
"TimeStamp":"\/Date(-62135596800000)\/"
},
"SammelstoerungTechnisch":{
"StationId":2,
"DpId":20129,
"Name":"SammelstoerungTechnisch",
"Value":0,
"TimeStamp":"\/Date(-62135596800000)\/"
},
"KommunikationsStoerung":{
"StationId":2,
"DpId":20138,
"Name":"KommunikationsStoerung",
"Value":0,
"TimeStamp":"\/Date(-62135596800000)\/"
},
"KommunikationsStoerungKE":{
"StationId":2,
"DpId":20137,
"Name":"KommunikationsStoerungKE",
"Value":0,
"TimeStamp":"\/Date(-62135596800000)\/"
},
"AllowCommands":true,
"AllowParameters":true
},
{
"StationId":4,
"Text":"Test W 1",
"IsDialInStation":false,
"ConnectState":{
"StationId":4,
"DpId":14,
"Name":null,
"Value":1,
"TimeStamp":"\/Date(1402996083000)\/"
},
"ConnectStateText":"Nicht verbunden. Hier klicken für Anwahl!",
"HasActualData":{
"StationId":4,
"DpId":10,
"Name":null,
"Value":0,
"TimeStamp":"\/Date(1404890134000)\/"
},
"Anlage":{
"StationId":4,
"DpId":20101,
"Name":"Anlage",
"Value":0,
"TimeStamp":"\/Date(-62135596800000)\/"
},
"cmdSchalteAnlage":{
"StationId":4,
"DpId":20013,
"Name":"cmdAnlage",
"Value":0,
"TimeStamp":"\/Date(-62135596800000)\/"
},
"Kurzzeit":{
"StationId":4,
"DpId":20104,
"Name":"Kurzzeit",
"Value":0,
"TimeStamp":"\/Date(-62135596800000)\/"
},
"cmdSchalteKurzzeit":{
"StationId":4,
"DpId":20012,
"Name":"cmdKurzzeit",
"Value":0,
"TimeStamp":"\/Date(-62135596800000)\/"
},
"Handbetrieb":{
"StationId":4,
"DpId":20160,
"Name":"Handbetrieb",
"Value":0,
"TimeStamp":"\/Date(-62135596800000)\/"
},
"Betriebsbereit":{
"StationId":4,
"DpId":20121,
"Name":"Betriebsbereit",
"Value":0,
"TimeStamp":"\/Date(-62135596800000)\/"
},
"Heizt":{
"StationId":4,
"DpId":20451,
"Name":"Heizt",
"Value":0,
"TimeStamp":"\/Date(-62135596800000)\/"
},
"Sammelstoerung":{
"StationId":4,
"DpId":20140,
"Name":"Sammelstoerung",
"Value":0,
"TimeStamp":"\/Date(-62135596800000)\/"
},
"SammelstoerungTechnisch":{
"StationId":4,
"DpId":20129,
"Name":"SammelstoerungTechnisch",
"Value":0,
"TimeStamp":"\/Date(-62135596800000)\/"
},
"KommunikationsStoerung":{
"StationId":4,
"DpId":20138,
"Name":"KommunikationsStoerung",
"Value":1,
"TimeStamp":"\/Date(-62135596800000)\/"
},
"KommunikationsStoerungKE":{
"StationId":4,
"DpId":20137,
"Name":"KommunikationsStoerungKE",
"Value":0,
"TimeStamp":"\/Date(-62135596800000)\/"
},
"AllowCommands":true,
"AllowParameters":true
},
{
"StationId":3,
"Text":"Test W 2",
"IsDialInStation":false,
"ConnectState":{
"StationId":3,
"DpId":14,
"Name":null,
"Value":1,
"TimeStamp":"\/Date(1402996031000)\/"
},
"ConnectStateText":"Nicht verbunden. Hier klicken für Anwahl!",
"HasActualData":{
"StationId":3,
"DpId":10,
"Name":null,
"Value":1,
"TimeStamp":"\/Date(1405488343000)\/"
},
"Anlage":{
"StationId":3,
"DpId":20101,
"Name":"Anlage",
"Value":1,
"TimeStamp":"\/Date(-62135596800000)\/"
},
"cmdSchalteAnlage":{
"StationId":3,
"DpId":20013,
"Name":"cmdAnlage",
"Value":0,
"TimeStamp":"\/Date(-62135596800000)\/"
},
"Kurzzeit":{
"StationId":3,
"DpId":20104,
"Name":"Kurzzeit",
"Value":0,
"TimeStamp":"\/Date(-62135596800000)\/"
},
"cmdSchalteKurzzeit":{
"StationId":3,
"DpId":20012,
"Name":"cmdKurzzeit",
"Value":0,
"TimeStamp":"\/Date(-62135596800000)\/"
},
"Handbetrieb":{
"StationId":3,
"DpId":20160,
"Name":"Handbetrieb",
"Value":0,
"TimeStamp":"\/Date(-62135596800000)\/"
},
"Betriebsbereit":{
"StationId":3,
"DpId":20121,
"Name":"Betriebsbereit",
"Value":1,
"TimeStamp":"\/Date(-62135596800000)\/"
},
"Heizt":{
"StationId":3,
"DpId":20451,
"Name":"Heizt",
"Value":0,
"TimeStamp":"\/Date(-62135596800000)\/"
},
"Sammelstoerung":{
"StationId":3,
"DpId":20140,
"Name":"Sammelstoerung",
"Value":1,
"TimeStamp":"\/Date(-62135596800000)\/"
},
"SammelstoerungTechnisch":{
"StationId":3,
"DpId":20129,
"Name":"SammelstoerungTechnisch",
"Value":1,
"TimeStamp":"\/Date(-62135596800000)\/"
},
"KommunikationsStoerung":{
"StationId":3,
"DpId":20138,
"Name":"KommunikationsStoerung",
"Value":0,
"TimeStamp":"\/Date(-62135596800000)\/"
},
"KommunikationsStoerungKE":{
"StationId":3,
"DpId":20137,
"Name":"KommunikationsStoerungKE",
"Value":0,
"TimeStamp":"\/Date(-62135596800000)\/"
},
"AllowCommands":true,
"AllowParameters":true
}
]
}
【问题讨论】:
-
标记存在哪些值?是否只有状态发生了变化,而您希望颜色发生变化?
-
由于您似乎无法真正使用标记,因此您需要使用 js 插入/更新标记。您仍然可以使用
subscribe函数来获取视图模型的更新并将它们传递给标记。 -
这将是一个好的开始,但最后还有更多:显示值的文本和显示植物名称的文本。
-
你可以考虑写一个 custom binding 来绘制你的标记。
-
能否请您为每个标记提供一些 json。这将有助于回答这个问题。
标签: javascript asp.net-mvc html knockout.js leaflet