2015-10-05 62 views
1

我使用Backbone.js。我有popup1,它創建popup2。 popup2是類似組件的,當它關閉時觸發事件'school_address:saved'。我需要在'school_address:saved'事件中向服務器發送請求。我在popup1(它的實例仍然存在)的視圖中放置了這樣做的處理程序,但我不確定這個地方是否合適,因爲視圖負責模板UI邏輯,是不是?單一責任原則和Backbone.View

你認爲這樣的代碼最好的地方是什麼?如果我使用Marionette.js會怎樣?

+0

你有什麼模型在你的意見?可以將這個「對服務器的請求」與模型中的數據相關嗎?如果是這樣,我認爲這個邏輯的最佳位置是在模型內部,而視圖將只是這個模型中的監聽事件。 – antejan

+0

你有什麼模型在你的意見? - 是的,在每個彈出窗口中。但由於popup2的「componential」性質,我不能修改它的模型,因爲只有在popup1實例化popup2時,才需要對popup2的事件。 – dortonway

+0

可以將這個「對服務器的請求」與模型中的數據相關嗎? - 不,這是一個空的請求。只是爲了提醒服務器,popup2已被處理。 – dortonway

回答

0

我們一直在使用BackboneJS了幾年了,並想知道在過去的類似案件......

由於BackboneJS(不像其他JS框架)不強制這樣做的任何常用的方式,我會一般認爲這取決於你的實現和應用程序流程。

然而,因爲這些彈出窗口/「應用模態」,我認爲如果你考慮以下根據您當前的需要,這將有助於:

  1. 如果只是popup1,可以實例化和顯示popup2,然後讓popup1 listenTo popup2觸發的事件。

  2. 如果您預見到您的應用程序流發生了變化,並且可能使popup2顯示在其他地方或獨立顯示,我建議您從更高級別的視圖(可能是您有路由)收聽popup2事件。這樣,您的兩個彈出窗口都將是「獨立的」,您可以更輕鬆地回收他們的代碼,並隨着應用程序的增長支持更大的靈活性。

+0

不僅popup1可以實例化並顯示popup2,但只有在popup1時才需要發送該請求。 由於可以在不同的「環境」中創建彈出窗口,因此無法在較高級別的視圖中偵聽該事件。 所以根據你的回答,我想我的選擇是正確的(把處理程序放在popup1上)。 但是,你爲什麼不認爲路由器是合適的? – dortonway

+0

在不同的「環境」中 - 我的意思是不同的頁面。由於該項目的具體情況,沒有佈局視圖,我也不確定,由於其整體性,這樣的地方是適當的。 – dortonway

+0

如果它是一個「普通」偵聽器,等待來自popup2的事件,那麼您可以將該代碼放在任何地方。它不必在任何視圖中 - 它可以簡單地在某處使用全局函數綁定,不一定來自路由器內... 如果事件是從多個地方觸發的(不僅在popup2內),我會簡單地傳遞另一個參數以及事件有效載荷,以區分從popup2或其他應用程序中出現的觸發器,以及事件功能檢查有效負載中提供的值的條件。 –