2017-08-25 70 views
0

我在嘗試做些有趣的事情:我想將記錄更改從一個客戶端發送到另一個客戶端,並讓第二個客戶端更新以顯示這些更改。基本上協作觀看。 第二個客戶端無法進行更改,他只能觀看。ExtJS在客戶端之間同步記錄

像字符串,數字,複選框等簡單的字段很容易,工作馬上。

引用是問題。如果我有一個組合使用另一個模型作爲源,我無法在第二個客戶端上更新它。

我試着設置只是id,然後整個引用的對象,我試過各種set options,但根本沒有骰子。

記錄確實發生了變化,我看到數據被更新了,我甚至能夠手動修改_ reference屬性,但UI一直顯示這些字段的舊值。

有沒有辦法將記錄從一個客戶端發送到另一個客戶端,讓另一個客戶端接管所有的值並在UI中顯示它們?倒不如送just the changes,但我會很高興,如果我能得到它與整個記錄工作)

編輯:我使用的是socket.io SailsJS,所以p2p連接不是問題。

我發現了數據是這樣的:

var data = record.getData(true); 
broadcastRecord(data); 

而在另一側上我嘗試:

record.set(data); 

爲接收側的代碼示例將被理解的是,如果任何人有一個ide如何解決這個...

+0

一旦設置並運行了p2p連接,將記錄從一個客戶端發送到另一個客戶端是非常容易的。正如你已經發現的那樣,這對文本和數字以及你可以存儲在記錄中的任何東西都很有效。但是,你提到的東西似乎不是記錄的一部分。那麼,你究竟想要發送什麼? – Alexander

+0

我在原帖中添加了更多信息。我所說的數據是記錄的一部分,但不是記錄數據的一部分。在record.data.user中找不到引用的用戶,但是在包含整個用戶文檔的record._user中,我不知道爲什麼,但事實就是這樣。當我做data = record.getData();那麼data.user是空的。但是,record.getData(true);返回包含用戶文檔的mongodb用戶集合標識的data.user。 –

+0

'record.getData(true)'返回關聯,所以這就是爲什麼你的參考數據在那裏......爲了更新用戶數據,你可以直接綁定它,或者你必須做'記錄.user()。set('fieldName',fieldValue)'。在Ext JS 6.5中,有一個['loadData'](http://docs.sencha.com/extjs/6.5.1/classic/Ext.data.Model.html#static-method-loadData)方法可能是有用的對於你來說,但是這會創建一個全新的模型......它很容易回溯到6.2。 – incutonez

回答

0

我認爲你的問題是關聯到關聯和組合框。

比方說,您有一個模型用戶,其中有一個字段組引用了模型組,並且您擁有一個帶有組合框的用戶表單。

在接收方客戶端中,您可能只獲取組標識。 record.set(data)更新綁定的組合框調用setValue(groupId)。

此setValue將嘗試在其存儲中查找相應的記錄,但它不會向服務器端請求該記錄。相反,它會通過傳入的id創建一個新記錄(顯示一個空的組合框)。

如果可能,您可以在商店中設置remoteFilter:false,並在組合框中設置queryMode:'local',並預先加載該商店中的所有數據。

否則,我想你將不得不重寫組合框的setValue方法來遠程獲取記錄。

+0

我會嘗試設置remoteFilter和queryMode,然後我會看到有關預加載。謝謝! –

相關問題