2011-02-15 78 views
3

我正在使用Backbone.js構建應用程序,但是我遇到了一個問題,我無法很早解決問題。在視圖上呈現多個事件呈現

我有一個簡單的列表/詳細信息視圖設置,但現在每次我呈現詳細查看我的活動正在加劇。例如,顯示兩個詳細信息視圖並單擊一個鏈接將導致它被點擊兩次。

我的看法是這樣的(寫在CoffeeScript中):

# 
# Project List View 
# 
class ProjectListView extends Backbone.View 

    el: $("#projectList") 

events : { 
    "click #addProject" : "createNewProject" 
} 

initialize : -> 
    @template = _.template(app.projectListView) 
    _.bindAll(this, "render", "createNewProject") 
    @render() 

createNewProject : (e) -> 
    e.preventDefault() 
    e.stopPropagation() 
    tempProject = Projects.create({ 
    title : 'Test Project' 
    description : '' 
    browserDefault : 12 
    lineHeight : 21 
    }) 

render : => 
    $(@el).html(@template()) 
    @delegateEvents() 
    return @ 

顯然採取的事件了出來,我沒有獲得任何點擊事件射擊。我在這裏錯過了什麼?

回答

3

您粘貼的代碼似乎沒有正確縮進。這是怎麼回事?

你不需要_.bindAll線。相反,只需使用=>來定義你的方法(而不是->

我做了一些文體修改,並拿出額外的@delegateEvents,正如朱利安所建議的。看看這個工程:

class ProjectListView extends Backbone.View 

    el: $("#projectList") 

    events: 
    "click #addProject" : "createNewProject" 

    initialize: => 
    @template = _.template(app.projectListView) 
    @render() 

    createNewProject: (e) => 
    e.preventDefault() 
    e.stopPropagation() 
    tempProject = Projects.create 
     title: 'Test Project' 
     description: '' 
     browserDefault: 12 
     lineHeight: 21 

    render: => 
    @el.html @template() 
    @ 
+0

是的,這與一些代碼整理,它的工作。這是因爲我每次都在創造一種新的觀點,這不是我想要做的。 我不知道我可以刪除_bindAll這一行,非常有趣的感謝傢伙。 代碼在代碼中關閉時正確縮進了格式。 – JMWhittaker 2011-02-21 14:17:13

2

這是我對你的代碼的評論。 Backbone將根據您的事件選項自動委派事件(使用delegateEvents)。您不必在渲染功能中執行此操作(很可能是引發雙倍事件的原因)。從你的渲染中刪除deleteEvents。

此外,@el已經被定義爲一個jQuery對象,所以你不必在您渲染再做一次。

你會創建2個項目列表視圖嗎?如果ID必須是唯一的...