2012-02-08 51 views
2

我正在嘗試使用骨幹表單庫實現帶骨幹的簡單登錄表單。如何將骨幹表單鏈接到事件?

$(function() { 
    var LoginUser = Backbone.Model.extend({ 
    schema: { 
     username: { type: 'Text' }, 
     password: { type: 'Text' } 
    }, 
    url: 'login_backbone_form' 
    }); 

    var thisLogin = new LoginUser(); 

    var form = new Backbone.Form({ 
    model: thisLogin, 
    events: { 
     "click button#formButton" : "saveForm" 
    }, 

    saveForm: function() { 
     alert('hit saveForm'); 
     this.model.save(); 
    } 
    }).render(); 

    window.form = form; 
    $('#formHook').html(form.el); 
    $('<button type="button" name="login" id="formButton">Login</button>') 
    .appendTo('#formHook'); 
}); 

我的HTML有一個ID爲'formHook'的div,頁面顯示帶有登錄按鈕的窗體。但按下按鈕什麼也不做。

我在這裏做錯了什麼?

回答

4

第一個問題可能是您的表單按鈕超出了表單視圖的上下文範圍。將DOM事件處理程序附加到視圖時,它們只會響應該視圖中的元素。嘗試在主視圖中嵌入表單和按鈕。

下面的代碼,它也是在這裏的jsfiddle: http://jsfiddle.net/evilcelery/hsSru/

$(function() { 
    var LoginUser = Backbone.Model.extend({ 
     schema: { 
      username: { 
       type: 'Text' 
      }, 
      password: { 
       type: 'Text' 
      } 
     }, 
     url: 'login_backbone_form' 
    }); 

    var LoginView = Backbone.View.extend({ 
     events: { 
      "click button#formButton": "saveForm" 
     }, 

     initialize: function() { 
     this.model = new LoginUser(); 
     }, 

     render: function() { 
     var $button = $('<button type="button" name="login" id="formButton">Login</button>'); 

     this.form = new Backbone.Form({ model: this.model }); 

     this.$el.append(this.form.render().el); 
     this.$el.append($button); 

     return this; 
     }, 

     saveForm: function() { 
      this.form.commit(); 
      this.model.save(); 

      alert('hit saveForm'); 
      console.log(this.model.toJSON()); 
     } 
    }); 

    window.loginView = new LoginView; 
    $('#formHook').html(loginView.render().el); 
}); 
+0

謝謝,這是有道理的。我碰到代碼上的錯誤 - 我不贊成導致錯誤的各種$ varname用法。我可以通過爲'el'刪除'$ el'並使用'appendChild'而不是'append'(後者不是一種方法)來清除這些內容,但是$ button部分會一直拋出NOT_FOUND_ERR:DOM異常8.我會嘗試完成今晚晚些時候調試。 – chernevik 2012-02-09 00:08:24

+1

您是否使用最新的Backbone? (0.9.1) – evilcelery 2012-02-09 00:34:58

+0

我現在。提交()似乎是一個錯誤(模型沒有這種方法),但我評論說,其餘工作正常,我得到警報和我的服務器日誌顯示POST。丹科。 – chernevik 2012-02-09 01:56:05