簡體   English   中英

更改 model 中數據的最佳方法是什么?

[英]What is the best way to change data in a model?

想象一個包含一些項目的列表。 每個項目都是一部電影,包括:

  • 標題
  • 星級排名(1-5)
  • 添加到我的列表按鈕
  • 您可能會發表評論的文本框

可以怎么做:

  • A) 該項目將偵聽 buttonClicked 事件,然后將調用 model 上的方法:

     onClick: function(event){ this.model.addToMyList(); }

    無需指定movieId,因為“模型”用於此項目。 在其他情況下,model 適用於所有項目。

  • B 該列表將偵聽一個項目以調度 buttonClicked 事件,從該事件中獲取數據,並將調用 model 上的方法:

     model.addToMyList(movieId)
  • C列表會監聽一個item來dispatch buttonClicked事件,這個事件會進行item的index(也就是不是movie的id),然后使用list上的index找到movieId並調用一個方法在 model 上:

     model.addToMyList(movieId)

你沒有提到任何語言,所以我將給出一個語言中立的回應。

不推薦 C:通過列表中的索引識別項目似乎是一個簡單的選擇,但任何擴展功能或可維護性稍后可能會變得混亂(突然訂購列表,讓用戶過濾列表等)。

考慮到可維護性(不是先發制人的設計,而是更適應變化的設計),事件處理程序最好能夠識別正在處理的內容。 這樣,您可以修改將應用於所有項目的處理程序。

對於 B:我將更多保留用於更改的集合,目的是控件/組件正在偵聽集合更改(例如 INotifyCollectionChangedin .net)。 因此,很難說不知道您是否要對這個集合執行特定操作,但它不是我的首選,除非集合(作為數據模型)的變化決定了其他方面。

因此,考慮到上述情況,(這聽起來像是 AB 混合,但它是一種常用的解決方案):創建的新項目被注冊到事件處理程序(只需編寫一個事件處理程序),並傳入對項目的引用-row 本身或標識符。 所以,如果可能的話,你會看:

onClick: function(MyEvent e)
{
   this.model.addToMyList(e); //or this.model.addToMyList(e.ID)
}

因此,您有多個項目注冊同一個事件,需要維護一個事件處理程序,並且如果您的列表通過過濾器、排序等發生更改,您可以保留該處理的能力。

暫無
暫無

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

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