【问题标题】:Seeding a Dashing list from an External JSON file从外部 JSON 文件播种短跑列表
【发布时间】:2015-08-13 02:09:18
【问题描述】:

我是 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>

【问题讨论】:

    标签: ruby dashing


    【解决方案1】:

    我看到两个问题:

    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”键的“值”,并发送到您的 List 小部件:

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

    【讨论】:

      猜你喜欢
      • 2016-05-19
      • 2015-08-17
      • 2013-09-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多