2011-08-15 113 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 * –

相关问题