2012-06-07 182 views
0

我試着開始使用Backbone。我有以下JS:當我用Backbone觸發事件時,什麼也沒有發生

var Question = Backbone.Model.extend({ 
    defaults: function() { 
     return { 
      title: "Enter your question", 
      type: "smallTextField", 
      editMode: true 
     }; 
     }, 

    initialize: function() { 
      if (!this.get("title")) { 
      this.set({"title": this.defaults.title}); 
      } 
     }, 

    toggleEditMode: function() { 
     !this.get("editMode"); 
    }, 

    clear: function() { 
     this.destroy(); 
     }   

}); 

收藏:

var Questions = Backbone.Collection.extend({ 
    initialize: function(models, options) { 
     this.bind("add", options.view.addQuestionView); 
    } 
}); 

APPVIEW:

var AppView = Backbone.View.extend({ 
    el: $("body"), 

    initialize: function() { 
     this.questions = new Questions(null, { view: this }); 
    }, 

    events: { 
     "click #addQuestion": "addQuestionModel" 
    }, 

    addQuestionModel: function() { 
      var model = new Question(); 
      this.questions.add(model); 
    }, 

    addQuestionView: function(model) { 
     $("#questionBox").append("<div>" + model.get('title') + "</div>"); 
    }, 

}); 

    var appview = new AppView; 

和下面的HTML:

<div id="questionBox"></div> 
<a href="#" id="addQuestion">Add question</a> 

在我的茉莉花規範,我觸發$( 「#addQuestion」)點擊();

但是 - 當我運行測試時沒有任何反應。例如。似乎沒有函數綁定到#addQuestion的click事件。

我猜想某些事情做錯了,我可能根本不知道它是什麼。

有什麼想法?

+0

適用於我:http://jsfiddle.net/fguillen/6dT6N/我希望你有一個適當的HTML在你的茉莉花,我的意思是說你的'一個#addQuestion'被正確地放入'body'標籤,所以'events'選擇符可以匹配它。 – fguillen

+0

我支持編輯您的問題,刪除所有代碼只是添加噪聲,我們是否需要模型和集合實現? – fguillen

回答

0

你爲什麼在你的ID中有#號?這是一個錯字嗎? 嘗試刪除它(id =「addQuestion」)

此外,你確定你已經初始化視圖觸發你的點擊之前? 通常,當事件沒有被觸發時,這是因爲它們被設置在視圖範圍之外的元素上(例如,在視圖「el」中未包含的鏈接上)。但是,既然你使用的是身體,我不知道它是如何來自那裏的(除非你在你的文章中修改了它)。 所以我的猜測是你的jQuery選擇器在這裏不是很有用。 嘗試:

el: "body" 

代替:

el: $("body") 
+0

只是在將代碼發佈到此處之前修改了一些代碼後才推出了一個錯字。 – Helge

+0

以上都沒有幫助? – Ronan

0

通常當我有這個問題,它涉及到的對象的屬性文字你傳遞到骨幹視圖的事實正在評估在jQuery和DOM完全加載之前。

下面是描述問題和幾種解決方案的excellent post

相關問題