2 つの問題があります。
1) 間違ったオブジェクトを送信しています:
response = JSON.parse(json)
name_list[people] = {label: response.keys, value: response.keys[]}
send_event('whosHere', { items: response.values })
name_list[people]
JSON の処理から想定される結果ですが、response.values
代わりに送信しています。
response
解析された JSON オブジェクトが返されます。response
リストに送信する JSON オブジェクトの配列を作成するには、 繰り返し処理する必要があります。
# new empty array of persons each time job is run
persons = []
# since your JSON file is single JSON object, using names for keys
person_names = response.keys
# for each name, do this
person_names.each do |name|
# use the 'name' key to get the value (their status)
person_status = response[name]
# create new Hash/JSON object for each person
# use "label" and "value" keys for Dashing List widget
person = Hash.new("label",name,"value",person_status)
# add this new person object to your persons array
persons.push(person)
end
persons
代わりに配列を Dashing に送信する更新されたジョブ:
require 'rubygems'
require 'json'
require 'pp'
name_list = Hash.new(0)
SCHEDULER.every '10s' do
json = File.read('list.json')
response = JSON.parse(json)
persons = []
person_names = response.keys
person_names.each do |name|
person_status = response[name]
person = Hash.new("label", name, "value", person_status)
persons.push(person)
end
send_event('whosHere', { items: persons })
end
2) JSON が適切にフォーマットされていません。Dashing の List ウィジェットは、「ラベル」キーと「値」キーを持つオブジェクトの配列をリッスンしています。各人物は個々の JSON オブジェクトになり、その人物の名前は「ラベル」の値になり、ステータスは「値」の値になります。
リスト ウィジェットのリスト項目 HTML は次のとおりです。
<li data-foreach-item="items">
<span class="label" data-bind="item.label"></span>
<span class="value" data-bind="item.value"></span>
</li>
各リスト項目には、単一の JSON オブジェクトが表示されます。
{
"label":"Mike",
"value":"Here"
}
リストに Mike と Jon のステータスを表示するには、次の 2 つの JSON オブジェクトを含む配列が必要です。
[
{
"label": "Mike",
"value": "Here"
},
{
"label": "Jon",
"value": "Out"
}
]
この配列は、リスト ウィジェットに送信されるデータ オブジェクトの「items」キーの「値」になります。
{
"items": [
{
"label": "Mike",
"value": "Here"
},
{
"label": "Jon",
"value": "Out"
}
]
}