2015-04-04 53 views
1

我是新來的Dashing(並且相對較新的Ruby),所以如果這是一個愚蠢的問題,我提前道歉。基本上我試圖讓Dashing讀取每10秒更新一次的json文件。但我似乎無法讓我的工作閱讀該文件或將其發佈到我的列表小部件。從外部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> 

回答

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是您的parsed-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陣列發送到請速來代替:

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 ISN」 t格式正確。 Dashing的List小部件正在偵聽具有「label」和「value」鍵的對象數組。每個人都是一個單獨的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和喬恩的狀態,您將需要一個包含兩個JSON對象的數組:

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

此數組將爲「值」爲您的數據對象中的「項目」鍵發送到您的列表部件:

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