0

我有一个带有日历页面的应用程序。在那个页面上,我有代表约会的元素。到目前为止,这是我一直在显示约会的方式:

  1. 将所有元素打印到页面上,每个元素都带有position: absolute.
  2. 遍历元素,获取每个元素并根据约会开始的时间晚点appointment_id设置该元素的属性。top

换句话说,我在 , 处将所有约会彼此叠放top: 0left: 0然后将每个约会垂直移动到正确的位置。(这是一个多人日程日历,而不是常规挂历。)我做了类似的事情来将约会安排成列,但现在这并不重要。

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

发生这种情况的原因很清楚,也很有意义。我只是不知道该怎么办。在 Backbone 中,如果我不能使用其模型的 ID,我如何引用一个元素?

为了使事情变得更复杂,除非我在渲染视图执行此重新排列,否则这些重新排列都不起作用 - 换句话说,我必须在路由器中进行重新排列。这似乎是错误的,在路由器的范围内,我不再有权访问各个元素。我只能访问包含约会模型的集合,并且我只能将每个模型与它的元素匹配,如果它的元素知道它自己的约会 ID,更新后它不知道!

希望这一切都说得通。有什么建议么?

4

1 回答 1

0

每个代表约会的 DOM 元素都应该是一个单独的视图,并绑定了 Appointment 模型。

当 Appointment 模型发生变化时,您需要做的就是重新渲染该单个视图(仅重新计算一个位置并减少 DOM 操作)。

预约查看:

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
于 2012-06-28T19:21:45.220 回答