【发布时间】:2012-06-07 12:51:34
【问题描述】:
我尝试开始使用 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);
}
});
应用视图:
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 的点击事件。
我猜有些地方做错了,我根本不知道是什么。
有什么想法吗?
【问题讨论】:
-
为我工作:jsfiddle.net/fguillen/6dT6N 我希望你的 jasmine 中有一个正确的 HTML,我的意思是你的
a#addQuestion被正确地放置在一个body标记中,所以events选择器可以匹配它。 -
我打算编辑您的问题以删除所有添加的代码只不过是噪音,我们是否需要这里的模型和集合实现?
标签: javascript testing backbone.js tdd jasmine