0

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 のクリック イベントにバインドされている関数はないようです。

何かが間違っていると思いますが、それが何であるかを理解することはできません。

何か案が?

4

2 に答える 2

0

IDに#が含まれているのはなぜですか?タイプミスですか?削除してみてください(id = "addQuestion")

また、クリックをトリガーする前にビューを初期化したことを確認しますか?通常、イベントがトリガーされないのは、イベントがビューのスコープ外の要素に設定されているためです(たとえば、ビュー "el"に含まれていないリンク)。しかし、あなたはbodyを使用しているので、そこからどのように取得できるのかわかりません(投稿で変更しない限り)。したがって、ここではjQueryセレクターはあまり役に立ちません。試す:

el: "body"

それ以外の:

el: $("body")
于 2012-06-07T12:57:23.333 に答える
0

通常、この問題が発生するのは、バックボーン ビューに渡すオブジェクト リテラルのプロパティが、jQuery と DOM が完全に読み込まれる前に評価されるという事実に関連しています。

これは、問題といくつかの解決策を説明する優れた投稿です。

于 2012-06-07T13:28:40.413 に答える