Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 历史记录已经开始_Javascript_Backbone.js - Fatal编程技术网

Javascript 历史记录已经开始

Javascript 历史记录已经开始,javascript,backbone.js,Javascript,Backbone.js,我在我的Backbone.js应用程序上收到一个错误“Backbone.history已经启动”。这是我的密码 (function ($) { // model for each article var Article = Backbone.Model.extend({}); // collection for articles var ArticleCollection = Backbone.Collection.extend({ model:

我在我的Backbone.js应用程序上收到一个错误“Backbone.history已经启动”。这是我的密码

(function ($) {
    // model for each article
    var Article = Backbone.Model.extend({});

    // collection for articles
    var ArticleCollection = Backbone.Collection.extend({
        model: Article
    });

    // view for index page
    var MainView = Backbone.View.extend({
        el: $('#wrapper'),
        render: function (){
            var template = Handlebars.compile($("#main_hb").html());
            $(this.el).find('#main_content').html(template);
            return this;            
        }   
    });

    // view for listing blog articles
    var ArticleListView = Backbone.View.extend({
        el: $('#wrapper'),
        render: function(){
            var js = this.model.toJSON();
            var template = Handlebars.compile($("#articles_hb").html());
            $(this.el).find('#main_content').html(template({articles: js}));
            return this;    
        }
    });

    // main app
    var ArticleApp = Backbone.Router.extend({
        // setup routes
        routes: {
            ""  : "index",
            "blog"  : "blog"
        },          
        index: function(){
            var main = new MainView({});
            main.render();
            return this;
        },          
        blog: function(){
            $.ajax({
                url: 'blogs/articles', 
                dataType: 'json',
                data: {},
                success: function(data)
                {
                    var articles = new ArticleCollection(data);
                    var view = new ArticleListView({model: articles});
                    view.render();
                }       
            });
            return this;
        }

    });

    // let's start the app!
    articleApp = new ArticleApp();
    Backbone.history.start();

})(jQuery);
应用程序本身似乎运行良好。但是Chrome中的错误是神秘的。

试试这个:

   articleApp = new ArticleApp();
   Backbone.history = Backbone.history || new Backbone.History({});
   Backbone.history.start();

你的代码似乎还可以。你确定你只加载了一次吗?如果将console.log()放在history.start()之前,日志是否只打印一次


通常,当多次调用history.start()时会出现此错误。恐怕你需要找到第二个电话。您在此处发布的代码不足以找到它。

<12/30/2013更新:看起来这可能是一个常见问题,我决定将原因加粗

我遇到了同样的问题并解决了它。原因是我

两次导入js文件


因此,我建议您检查包含此脚本的页面,看看它是否被引入了两次。

我遇到了此问题,这是因为我在我的application.js文件中执行了require_树。,并且我已经预编译了我的资产


如果您要使用require_树,请检查您没有public/assets文件。应用程序.js文件中。

如果您使用的是requirejs,请检查脚本是否不包含自身-只需在开始时添加console.error()调用,并查看它出现了多少次。我之所以提出这个问题,是因为我将优化配置复制到了线性执行中。

我也遇到了同样的问题,因为我的Rails 4应用程序中有TurboLink。 这个变通方法帮助了我。也许它也会帮助你:

initialize: ->
  new MyApp.Routers.Posts
  Backbone.history.start() unless Backbone.History.started
  $(document).on "page:change", ->
    Backbone.history.stop()
    Backbone.history.start()

在这里找到了答案:

余静说得对!它导入了js两次。更新 我的“修复”(当然更像是一种解决办法)是将其放在路由器中

Backbone.history.stop();
Backbone.history.start();

可能不是最理想的,但它以一种天真的方式完成了任务。

该应用程序看起来像一个定义,而不是一个开始。此代码在加载时运行,而不是在调用
$(document).ready()
时运行。你可以加载它两次,或者用
$(document).ready()调用再次调用它吗?
调用?我的建议是用非小型版本的主干网调试它。你不应该这样做,路由器应该为你初始化
主干网。历史记录,你要扔掉旧的
主干。历史
而不关闭它吗?旧实例仍然存在,它将继续每秒轮询浏览器20次(并尝试对URL更改做出反应)。如果出于某种原因确实需要重新启动它,请先调用
Backbone.history.stop()
,然后重新启动它,不要重新实例化它。如果答案与问题使用相同的语言编写,则可能会更有帮助。:)正如Nick Pridorozhko的回答所暗示的,您还可以测试
Backbone.History.started
(注意“History”的大写)。也就是说,您(通常)不需要停止和启动主干。历史记录,因此这闻起来更多的是“变通”而不是“修复”。