簡體   English   中英

跟蹤 View 狀態信息的推薦方法是什么?

[英]What is the recommended way(s) to keep track of View state information?

我在閱讀有關 Backbone 的文章時發現的共識似乎是:不要將內容存儲在視圖中,而是將其存儲在模型中,然后讓視圖監聽模型的變化。

如果我們談論的情況是我們已經有了明顯的模型-視圖配對,那就太好了。 例如,您有一個 User 模型和一個 UserView 視圖。 顯然,您在視圖上設置了一個模型屬性,它會監聽模型的變化。

但是,假設我有一個顯示內容列表的視圖,並且有幾個按鈕可以在“列表視圖”和“網格視圖”之間切換。 這是我在應用程序和網站中看到的一個非常常見的約定。 我是否想要“列表視圖”或“網格視圖”與模型/集合本身並不真正相關; 它似乎非常特定於視圖本身。

起初我只是嘗試使用與模型完全相同的視圖:設置屬性,綁定事件'change:propertyName' ,然后使用someView.set('propertyName')等來更新它......但這並沒有不行。

在思考如何解決這個問題時,我想我記得以前看到過這樣的事情:

var MyView = Backbone.View.extend({
    ...
    model: Backbone.Model(),
    ...
});

因此,與擁有 UserModel 不同的是,我們只有一些“無類型”模型。 或者我想,我實際上可以創建一個新類,可能只是為此而稱為MyViewModel ......盡管我看不出有什么理由這樣做。

這允許我像我想要的那樣綁定到更改事件並使用someView.model.set(...)設置視圖數據。

所以我的問題是:這是人們在 Backbone 中為視圖狀態所做的常見事情嗎? 或者,還有更好的方法? 謝謝。

您是否希望在用戶訪問頁面時使用選定的顯示樣式(列表與網格)? 如果是這樣,最簡單的解決方案可能是將該狀態存儲在 localStorage 中,並讓視圖類直接訪問它。

如果您不需要記住當前的顯示樣式,那么您可能根本不需要存儲狀態。 單擊按鈕時更改樣式。 當頁面刷新時,它返回到默認值。

如果您的應用有已登錄用戶的帳戶,並且您希望他們的選擇在他們可能使用的所有設備上保持UserModel ,則您需要有類似UserModel (具有登錄用戶的信息和首選項)之類的東西來記錄他們的選擇並將其保存到服務器。 您的視圖可以偵聽此模型的更改。

Backbone(對我而言)的美妙之處在於沒有一種正確的方法可以做某事。 這些想法只是可以處理它的一些方法。

您還可以在集合上有一個displayStyle屬性。 我從可排序表中得到這個想法:在這種情況下,排序元數據是集合對象的一部分。 當您通過選擇列標題對表進行重新排序時,您將更改集合的comparator並重新排序。 該視圖將偵聽“排序”事件並在它發生時重新渲染。 您可以對顯示樣式執行類似的操作(您可以通過在this.trigger('display-style')執行this.trigger('display-style')並讓視圖偵聽該事件來創建自己的事件)。

最后,無論您決定如何管理該狀態,您都應該考慮這應該全部是一個視圖類還是多個視圖類。 我認為這在很大程度上取決於您的應用程序的復雜性。 在許多情況下,使用ProductListViewProductGridView可能更好,而不是具有兩種顯示樣式的單個ProductView 將它們拆分為單獨的視圖甚至可能使將來添加其他樣式( ProductImageView ,也許?)更容易。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM