2012-06-28 30 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

這工作!謝謝! –