2012-06-28 97 views
0

我有一个包含日历页面的应用程序。在那个页面上,我有代表约会的元素。以下是我迄今为止一直在展示的约会:当项目没有ID时更新Backbone视图项目

  1. 将所有元素打印到页面上,每个元素都带有position: absolute
  2. 迭代元素,根据每个元素的appointment_id并根据约会开始的当天晚些时候设置该元素的top属性。

换句话说,我倾倒在彼此顶部所有的约会在top: 0left: 0,然后我垂直移动每个约会到正确的位置。 (这是一个多人日程安排日历,不是普通的挂历。)我做了类似的事情,将约会安排在专栏中,但现在并不重要。

这是我的问题:在初始页面加载时,一切正常,因为每个约会元素都有一个与它关联的ID。 但是,当我更新约会时,其ID将被清除,并且在执行重新排列时错过了约会。它只是粘在左上角。

这种情况发生的原因很清楚,很有意义。我只是不知道该怎么办。 在Backbone中,如果我不能使用它的模型ID,该如何引用一个元素?换句话说,我所要做的路由器中重排 -

为了让事情变得更加复杂,除非我做后视图显示没有这种重排在所有工作。这似乎是错误的,并且在路由器的范围内,我不再能够访问各个元素。我只能访问包含约会模型的集合,并且如果其元素知道其自己的约会ID,则只能将每个模型匹配到其元素,在更新之后,它不会!

希望大家都有道理。有什么建议么?

回答

0

表示约会的每个DOM元素都应该是一个单独的视图,该约束具有约会模型约束。

当约会模型更改时,您只需重新渲染该单个视图(仅重新计算一个位置并减少DOM操作)。

AppointmentView:

AppointmentView = Backbone.View.extend 
    # model: Appointment 
    tagName: "div" 
    events: {} 

    initialize: -> 
     @model.on 'change:time', @render, @ 

    render: -> 
     # calculate the position and append to the DOM 
     # you can take a look at setElement function, if needed - http://documentcloud.github.com/backbone/#View-setElement 
+0

这工作!谢谢! –