2011-05-09 188 views
0

我正在使用Backbone.js创建应用程序。但是它将代码渲染两次。就好像代码正在运行两次。我查找了重复的代码,找不到任何可以运行两次的东西。Backbone.js双重渲染问题

发生什么事的一个例子是在init中,主体内容应该被div#app_container标签包装。但是当我加载页面时,它会将其封装在div#app_container中,然后将其封装在dev#app_container标记中。另外,如果我在'initialize()'函数中放置alert('test'),它会发出两次“测试”警报。

这有道理吗?

- 编辑 -

与代码玩弄后,我发现,如果我删除其包裹在身体一切都行,那么问题将停止。所以wrapInner中有一些东西或影响正在导致代码运行两次的正文。

问题代码:

$("body").wrapInner('<div id="app_container" />'); 

这里是我的应用程序的JS文件中的代码:

(function ($) { 

    window.AppView = Backbone.View.extend({ 

    self: this, 

    el: $("body"), 

    defaults: { 
     current_selected: "", 
     last_selected: "", 
     toggle: 0, 
     Messages: "", 
     latest_template: "", 
    }, 

    events: { 
     "click #annotate_app_container" : "select" 
    }, 

    initialize: function() 
    { 
     $("body").wrapInner('<div id="app_container" />'); 
     $.get('/assets/includes/ajax.php', function(data){ 
      $("#app_container").after(data); 
     }); 
    }, 

    select: function (e) { 

     e.preventDefault(); 

     // Code goes here 
    }, 

    }); 

window.App = new AppView; 

})(jQuery); 

是这个文件,我包括在页面上,如下所示:

<script type="text/javascript" src="/assets/js/json2.js"></script> 
    <script type="text/javascript" src="/assets/js/jquery.min.js"></script> 
    <script type="text/javascript" src="/assets/js/underscore.js"></script> 
    <script type="text/javascript" src="/assets/js/backbone.js"></script> 
    <script type="text/javascript" src="/assets/js/mustache.js"></script> 
    <script type="text/javascript" src="/assets/js/app.js"></script> 

让我知道你的想法是什么。

回答

0

您可能会检查导致页面再次加载的任何散列更改事件。我曾经有过类似的行为,一旦造成元素<a href='#'>,也有一个事件绑定到它。

0

这是因为你准备在文档中做一个ajax调用。它将触发第二个文档准备事件。你可能想要做类似

setTimeout(function(){window.App = new AppView()}, 1); 

可能不是问题,但我相信它与那个打电话有关。