Backbone.js双重渲染问题

时间:2011-05-09 19:28:55

标签: javascript jquery backbone.js

我正在使用Backbone.js来创建一个应用程序。但是它会将代码渲染两次。好像代码正在运行两次。我已经找了重复的代码,找不到任何会运行两次的东西。

发生的一个例子是在init上,body内容应该由div#app_container标签包装。但是当我加载页面时,它将包装在div#app_container中,然后将其包装在dev#app_container标记中。

另外,如果我在'initialize()'函数中设置alert('test'),它会警告“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>

让我知道你的想法。

2 个答案:

答案 0 :(得分:0)

您可以检查导致页面再次加载的任何哈希更改事件。我有一个类似的行为,一旦由一个元素<a href='#'>引起,它也有一个绑定到它的事件。

答案 1 :(得分:0)

这是因为您在文档中准备好了ajax调用。它将触发第二个文档就绪事件。您可能想要执行类似

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

可能不是问题,但我确信这与接到电话有关。