我尝试开始使用Backbone。我有以下JS:
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>
在我的Jasmine规范中,我触发$(“#addQuestion”)。click();
然而 - 当我运行测试时没有任何反应。例如。似乎没有函数绑定到#addQuestion的click事件。
我觉得有些事情做错了,我根本不知道它是什么。
有什么想法吗?
答案 0 :(得分:0)
为什么你的身份证上有#?这是一个错字吗? 尝试删除它(id =“addQuestion”)
另外,您确定在触发点击之前已经初始化了视图吗? 通常,当事件未被触发时,因为它们被设置在超出视图范围的元素上(例如,在视图“el”中未包含的链接上)。但是因为你正在使用身体,我不知道它是如何从那里来的(除非你在帖子中修改它)。 所以我的猜测是你的jQuery选择器在这里没用。 尝试:
el: "body"
而不是:
el: $("body")
答案 1 :(得分:0)
通常当我遇到这个问题时,它与你在传递到Backbone视图中的对象文字的属性在jQuery和DOM完全加载之前被评估的事实有关。
这是一个描述问题的excellent post和几个解决方案。