2016-04-15 33 views
0

首先,我想說我是網絡開發新手,所以我可能會使用錯誤的詞彙表。服務器更新視圖(Mithriljs)(playframework)

我想從我的服務器發起一個操作,將數據庫修改發送到客戶端以更新視圖。

我想尊重SPA(單頁應用程序)模型,所以我所有的視圖都是由mithriljs生成的。

我會對我的數據庫進行一些外部修改,更新我的視圖而不刷新瀏覽器的最佳方式是什麼?

我在服務器端使用playframework。

+1

我不熟悉Mithriljs - 它的作用類似於Angular,當底層模型更新時,View會自動更新?如果是的話,你當然可以去一個WebSocket連接 - 你的Play應用程序將數據推送到客戶端 - >數據放入模型 - >視圖根據模型更新 – Anton

+0

是的,它的工作方式。感謝您的回答。我會看看WebSocket。你推薦一個JavaScript的websocket專用庫嗎? – GermainGum

+0

那麼如果Mithriljs有這個組件,你當然可以使用它。但即使不是--WebSocket連接可以用普通的JavaScript在幾行中實現 - 請看這裏:http://www.websocket.org/echo.html - 你也可以用它來測試你的服務器端 – Anton

回答

1

使用Mithril與任何推技術都非常簡單。正如Anton所提到的,您可以創建一個簡單的WebSocket連接並監聽函數中的數據。然後處理它,更新數據模型,如果一切正常,只需撥打m.redraw即可完成。事情是這樣的:(使用例如在https://www.websocket.org/echo.html

// A simple model, an array of messages: 
var messages = m.prop([]); 

function onMessage(evt) { 
    var message = evt.data; 
    // Some validation, only strings allowed 
    if (typeof message === 'string' || message instanceof String) { 
     messages().push(message); 
     // All ok, redraw 
     m.redraw(); 
    } 
} 

那麼你的祕圖的樣子:

var WebSocketMessages = { 
    view: function() { 
     m("ul", messages().map(function(message) { 
      return m("li", message); 
     })) 
    } 
} 

,並顯示它:

m.mount(document.body, WebSocketMessages);