2014-02-06 15 views
1

這是一個通用的體系結構問題。因此,想想MVC模型,其中包含數據的模型與特定的UI字段綁定,因此它們同時更新。將UI狀態直接存儲在數據模型中是否好?

現在我需要存儲與該UI字段相關聯的某個UI狀態,例如指示該字段是否處於編輯模式的標誌。用戶界面將根據這個編輯標誌進行更新,例如當編輯標誌爲真時它將顯示一些編輯控件。

因此,我會更好地重用數據模型,並將狀態與其他後端相關數據一起存儲(我肯定不會將此標誌發送回後端,因爲後端並不涉及UI狀態),或者創建一個新的容器跟蹤UI狀態?

+0

你是指服務器端作爲後端。我認爲一個持久性存儲作爲後端和服務器端編程(例如,用於Java中的jsp/servlets等)作爲前端。 –

+0

@pawindergupta是的,在這種情況下,我將持久存儲層稱爲後端,它處理讀取/更新數據庫。 –

回答

1

當UI窗體/模型變髒(用戶首先啓動與窗體的第一次交互)後,您將模型的狀態(自然是UI)存儲在一個對象中,我們稱之爲'bag'。 隨着用戶修改值,您會連續更新包。在用戶嘗試離開表單(關閉窗口,在瀏覽器等等中來回移動)之前,您可以將該包保存爲cookie(如果它很小)或者對您的服務器進行發佈並將其保存爲json對象一個帶有4個字段的表,如id,jsondata,modelUiIdentifier,userIdentifier。稍後當該頁面稍後加載時,您可以獲取該數據(如果它存在於該模型/用戶界面和用戶)並且保存模型對象(這會自動更新您的UI)。

如果使用angularjs,只是通過複製其數據通過相關的UI部分的$範圍對象迭代(在$範圍對象非「功能」的價值觀,併發送至服務器像上面所解釋的)

+0

感謝您的建議,他們是好點。然而,他們並沒有真正回答我的問題,我問是否要存儲UI狀態,是否值得在包含數據的UI的模型中添加UI狀態標誌(例如'editing = true'),或者更好地將用戶界面狀態分成另一個對象? –

+0

你可以做到這一點。所以,他們會在同一個地方。您可以附加一個對象,比如我的model.editingstate = {},並使用編輯數據填充它,因爲它們不會通過單獨的包來污染模型。 – Nihat

+1

如果我想保存ui狀態,我會單獨保存它,並將狀態數據與顯示給用戶的模型對象b4合併。我不希望我的模型具有這些額外的領域。我希望這可以幫助 – Nihat

1

狀態數據,數據是狀態。考慮到這一點,如果您需要存儲與UI字段關聯的某個UI狀態,請使用工廠創建一個對象。改變那個對象,你改變UI狀態。另外,工廠可以通過簡單注入在整個項目中重複使用,管理不同狀態的狀態,並且易於測試。

更新:

服務的簡單演示管理數據/狀態http://plnkr.co/edit/PdDmUz?p=preview

的.html

<h3>Controller 1</h3> 
    Check me, to check both: 
    <input type="checkbox" ng-model="selected.data" /> 
    <pre>selected.data: {{selected.data}}</pre> 


<h3>Controller 2</h3> 
    <div ng-controller="MainCtrl2"> 
    Or, check me: 
    <input type="checkbox" ng-model="selected2.data" /> 
    <pre>selected2.data: {{selected2.data}}</pre> 

的.js

app.controller('MainCtrl', function($scope,uiFieldState) { 
    $scope.selected = uiFieldState.uiObject; 
}) 

app.controller('MainCtrl2', function($scope,uiFieldState) { 
    $scope.selected2 = uiFieldState.uiObject; 
}) 

app.factory('uiFieldState', function() { 
    return {uiObject: {data: null} }; 
}); 
+0

在我看來,我將「數據」稱爲存儲在數據庫中的實際數據(如用戶名),將其綁定到用戶界面的目的是顯示並通過用戶界面進行更新。然而,state是一個純粹的可視化狀態(就像這個字段處於焦點或編輯模式中一樣),我認爲這不值得進入包含後端數據的同一模型。所以在你的回答中,你是否建議我將UI狀態存儲在不同的對象中? –

+1

用戶名'data'通常用於創建持久性授權/許可'狀態'服務,任何'編輯模式'功能都將根據用戶權限級別'data'在'狀態'中有條件地應用。上面我已經使用服務對象添加了UI狀態的示例。下面是一個示例應用程序(使用angularJS書進行應用程序開發),使用Object來控制諸如「編輯模式」之類的服務https://github.com/angular-app/angular-app/blob/master/client/ SRC /普通/安全/ security.js#L99 – cheekybastard

相關問題