2011-08-15 111 views
2

想象一下包含一些項目的列表。 每個項目是電影,包括:在模型中更改數據的最佳方式是什麼?

  • 標題
  • 星星(1-5)
  • 排名添加到我的列表按鈕
  • 一個文本框,你可以發表評論

怎麼可以這樣做:

  • A)的項目將監聽buttonClicked事件,然後將調用一個方法型號:

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

    沒有必要指定movieId因爲「模式」是爲這個項目。在其他情況下,該模型適用於所有項目。

  • B中的名單將監聽到調度buttonClicked事件中的項目,從事件獲取數據,並調用一個方法上的模型:

    model.addToMyList(movieId) 
    
  • 下的列表將監聽到調度buttonClicked事件中的項目,本次活動將進行指數(不是電影的ID)的項目,然後查找使用列表上的索引movieId,並調用一個方法上型號:

    model.addToMyList(movieId) 
    
+0

你能澄清你的意思是「最好的」? – Iterator

+0

靈活(可重用)和性能 –

+0

好問題。我對此一無所知,但答案也會對我有所幫助 - 特別是可重用性的關鍵問題。 – Iterator

回答

1

你不提任何語言,所以我打算給一個語言無關的反應。

不推薦C:通過列表中的索引識別項目可能看起來很簡單,但任何擴展功能或可維護性稍後可能會變得混亂(突然排列列表,讓用戶過濾列表等)。

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

隨着乙:我會更多的保留一個集合的變化,旨在控制/組件正在監聽收集變化(如INotifyCollectionChangedin .net)。所以這是一個很難的事情說了,不知道是否有你想要與此集合做具體的行動,但它不會是我的第一選擇,除非集合(如數據模型)的變化決定了其他方面。因此,考慮到上述原因(這聽起來像是一個AB混合體,但它是一個常用的解決方案):創建的新項目被註冊到一個事件處理程序(只需代碼一個事件處理程序),並通過要麼是對項目行本身的引用,要麼是一個標識符。因此,如果可能的話,你會看:

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

所以,你有多個項目簽約爲同一事件,一個事件處理程序,以維護和能力保護者認爲應該處理您的列表,通過改變過濾器,排序等。

+0

這是爲JavaScript * –

相關問題