1

我是 Dashing 的新手(对 Ruby 也比较陌生),所以如果这是一个愚蠢的问题,我提前道歉。基本上,我试图让 Dashing 读取我每 10 秒更新一次的 json 文件。但我似乎无法让我的工作读取文件或将其发布到我的列表小部件。

这是我的工作代码:

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

我看到两个问题:

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

更新了 Job,它将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 小部件正在侦听具有“label”和“value”键的对象数组。每个人都是一个单独的 JSON 对象,这个人的名字就是你的“标签”值,他们的状态就是他们的“价值”值。

这是 List 小部件中的列表项 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 的状态,您需要一个包含两个 JSON 对象的数组:

[
    {
        "label": "Mike",
        "value": "Here"
    },
    {
        "label": "Jon",
        "value": "Out"
    }
]

此数组将是您的数据对象中的“项目”键的“值”,这些数据对象将发送到您的列表小部件:

{
    "items": [
        {
            "label": "Mike",
            "value": "Here"
        },
        {
            "label": "Jon",
            "value": "Out"
        }
    ]
}
于 2015-08-12T18:09:18.250 回答