2016-08-25 43 views
0

我只是想用ReactRB用反應記錄。用react.rb不顯示數據

所以這筆交易是在我認爲的部分。當我在React Component class中設置param :user, type: User時,我看不到任何數據in my table。當然模型用戶在公共文件夾中,因爲這個要求在ReactRB中。

那麼,在控制檯我看到那臺服務器is fetching nothing, but right data returned

我失蹤了什麼?謝謝您的幫助!

的答案,關鍵是in this screenshot

的細節是將數據從服務器作爲JSON BLOB 反應記錄解碼它回來,但事實計數,如果你嘗試JSON解析一個簡單的字符串,會引發錯誤。 蛋白石0.10不再提高標準誤差,所以整個事情只是掛起。

回答

1

有一點要記住的是,反應記錄延遲加載記錄和屬性。因此,除非渲染中的某個位置,否則您將訪問特定記錄/屬性,該屬性不會顯示在客戶端上。

它很難告訴更多的沒有更多的代碼的有點快,但這裏有一些幫助:

比方說你的組件看起來是這樣的:

class Foo < React::Component::Base 
    param :user, type: User 
    def render 
    "user.name = #{user.name}" 
    end 
end 

和某處無論是在控制器或在一個佈局中,你這樣做:

render_component '::Foo', {user: User.first} 

你可能會嘗試一些非常簡單的事情,只是爲了熟悉事情的工作方式。

會發生什麼情況應該是這樣的:您將呈現您的視圖和佔位符第一個用戶將被髮送到組件,在呈現組件期間查找該用戶的名稱屬性,它沒有,所以排隊等待從服務器獲取。渲染將完成,最終數據將從服務器下來,本地模型的數據將被更新,並且顯示該數據的組件將被重新渲染。

在預渲染期間,所有上述情況都發生在服務器內部,並且在渲染組件後,將最終的html連同用於渲染組件的所有模型數據一起交付。所以在第一次加載時,如果一切正常,您將看不到來自服務器的任何提取。

因此,如果您嘗試了上面的小例子,然後進入你的JavaScript控制檯,你可以說這樣的事情:

Opal.User.$first() 

,你會看到底層的模型數據結構中返回(我從翻譯JS進入上面的紅寶石...紅寶石方法都開始$)

然後你可以這樣做:

Opal.User.$first().$name() 

你甚至可以做到這一點(假設有至少2個用戶模型):

Opal.User.$find(2).$name() 

你應該有類似「DummyValue」的返回,但是隨後會在控制檯中有一個服務器獲取循環,那麼如果你重複上述命令,你將獲得實際值!

這可能不是有關詳細信息,最好的論壇,如果你需要https://gitter.im/reactrb/chat更多的幫助下降