2015-11-29 22 views
-2

我在運行我的代碼時遇到了一個奇怪的錯誤。我正在使用Backbone.js和RequireJS的應用程序。問題出現時,代碼中有錯誤(任何),似乎骨幹或jQuery重定向到存在添加問號的網址?在頁面名稱末尾:Backbone add?在發生錯誤時在頁面url後出現

URL before the error: http://localhost/home#users 
URL after the error : http://localhost/home?#users 

這會導致頁面刷新。任何人都知道這是爲什麼?

這是我的代碼:

var myView = Backbone.View.extend({ 
    events: { 
      'click button#lookUp':'lookUp' 

     }, 
    lookUp: function(){ 
     //Force error to show the error calling a function does not exist 
     this.triggerSomeError(); 
    } 
    }); 

路由器:

var navigate = function(url) { 
    appRouter.navigate(url, { 
     trigger: true 
    }); 
} 

var initialize = function(){ 
    appRouter = new AppRouter; 
    Backbone.history.start(); 
} 

HTML:

<button class="alinear-btn btn btn-primary" id="lookUp">Imprimir</button>  

Chrome開發者控制檯:

Console log from Chrome

+2

Backbone或Requirejs中沒有什麼應該默認這樣做;你可以請分享更多的代碼,並給出更多的細節,這個錯誤實際上是什麼? –

+0

@NickTomlin這發生在我點擊按鈕時,如果我添加一個preventDefault(),重定向不會觸發,在它調用的函數內部發生一些錯誤。我會編輯我的問題共享somo代碼 –

回答

0

這是我們遇到的一個很常見的錯誤。您需要更改您的代碼如下:

var myView = Backbone.View.extend({ 
    events: { 
     'click button#lookUp':'lookUp' 
    }, 

    lookUp: function(event) { 
     event.preventDefault(); 

     //Force error to show the error calling a function does not exist 
     this.triggerSomeError(); 
    } 
}); 

默認情況下,事件對象傳遞到從事件收集調用的函數,你需要使用這個,以防止默認行爲。你可以命名參數。我通常稱之爲明確的事件。

什麼你實際上是抑制這裏是在瀏覽器中,這是做一個形式提交按鈕的默認行爲。當您在瀏覽器中執行表單提交時,它會嘗試將表單中的所有內容以及附加它作爲查詢參數url。在這種情況下,按鈕不是任何形式,所以它基本上不添加任何內容,只是將查詢參數的問號放在一邊。

你得票低於你的原因以及出現錯誤的原因是你沒有在你的視圖中創建一個名爲triggerSomeError()的方法,所以當然你會得到一個錯誤。但是,這是完全獨立的,並且與您的url路徑發生了什麼無關。

+0

感謝您的答覆。我已經像你說的那樣在幾天前解決了它。雖然,我很困惑爲什麼在我的代碼中發生這種情況。它不應該發生。另一方面,只有在出現問題時纔會出現問題,這就是爲什麼我將該錯誤行放入我的代碼中,確實是這樣。 –

+0

我不知道爲什麼它只發生在一個錯誤。每次單擊該按鈕時,該問號都會出現在url中,並且默認行爲未被抑制將是我的假設。 無論哪種方式,很高興你能解決問題。 –

相關問題