当项目没有ID时更新Backbone视图项目

时间:2012-06-28 19:10:39

标签: backbone.js

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

  1. 将所有元素打印到页面上,每个元素都使用position: absolute
  2. 迭代元素,获取每个元素的appointment_id并根据约会开始的当天晚些时候设置该元素的top属性。
  3. 换句话说,我在top: 0left: 0将所有约会转移到彼此之上,然后我将每个约会垂直移动到正确的位置。 (这是一个多人日程表,而不是常规的挂历。)我做了类似的事情,将约会安排到专栏中,但现在这并不重要。

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

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

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

    希望一切都有道理。有什么建议吗?

1 个答案:

答案 0 :(得分: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