我正在使用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>
让我知道你的想法。
答案 0 :(得分:0)
您可以检查导致页面再次加载的任何哈希更改事件。我有一个类似的行为,一旦由一个元素<a href='#'>
引起,它也有一个绑定到它的事件。
答案 1 :(得分:0)
这是因为您在文档中准备好了ajax调用。它将触发第二个文档就绪事件。您可能想要执行类似
的操作setTimeout(function(){window.App = new AppView()}, 1);
可能不是问题,但我确信这与接到电话有关。