1

私は Dashing を初めて使用する (そして Ruby を使用するのは比較的新しい) ため、これがばかげた質問である場合は事前にお詫びします。基本的に、10秒ごとに更新するjsonファイルを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)
    name_list[people] = {label: response.keys, value: response.keys[]}
    send_event('whosHere', { items: response.values })
end

そして私のJSON:

{
  "Mike": "Here",
  "Jon": "Out",
}

必要に応じて、私のダッシュボード コード:

<% content_for(:title) { "My super sweet dashboard" } %>
<div class="gridster">
  <ul>
    <li data-row="1" data-col="1" data-sizex="1" data-sizey="1">
      <div data-id="whosHere" data-view="List" data-title="Who's Home" style="background-color:#96bf48;"></div>
    </li>
  </ul>
</div>
4

1 に答える 1

0

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"
        }
    ]
}
于 2015-08-12T18:09:18.250 に答える