2015-11-29 25 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中,并且默认行为未被抑制将是我的假设。 无论哪种方式,很高兴你能解决问题。 –

相关问题