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,我正在编写一个简单的主干应用程序,使用JSON API插件与Wordpress接口。我可以使用一个集合在一个页面上显示当前的所有帖子,但是在获取单个帖子时遇到了问题。注意,这里使用的是ajax预过滤器 var NewsItem = Backbone.Model.extend({ urlRoot: '/api/get_post/', parse: function(response){ return response.post; } }); 我的看法是:

我正在编写一个简单的主干应用程序,使用JSON API插件与Wordpress接口。我可以使用一个集合在一个页面上显示当前的所有帖子,但是在获取单个帖子时遇到了问题。注意,这里使用的是ajax预过滤器

var NewsItem = Backbone.Model.extend({
    urlRoot: '/api/get_post/',
    parse: function(response){
        return response.post;
    }
});
我的看法是:

var SingleNewsItemView = Backbone.View.extend({
    tagName: "div",
    id: "single-view",
    initialize: function(data) {
        this.render(data);
    },
    render: function(data) {
        var that = this;
        var singleNewsItem = new NewsItem();
        singleNewsItem.fetch({
            data: $.param({"id": data}),
            success: function(returnitem) {
                var template = _.template($('#single-news-item-template').html(), {newsitem: returnitem});
                that.$el.html(template);
            },
            error: function(){
                alert('error retrieving item');
            }
        });
    }
});
正确的URL将被调用一次并显示在屏幕上。但是,之后很快就会调用相同的URL,id=undefined,这会导致在新闻项视图上过度写入错误数据


我已经在点击处理程序中放置了一个警报,由于鬼魂问题,它不会触发两次-这是fetch发生的事情,我无法理解

我猜您是在视图外部显式调用render,可能是在创建实例时,也可能是在初始化视图时自动调用。在render内部调用fetch很奇怪。您通常会调用render来响应提取。我应该提到我也在使用一个名为BackStack的库。我猜它在调用render函数,我也在initialize函数中调用它。非常感谢您的帮助-一切顺利!非常感谢:通常情况下,您会在初始化时执行提取并显示加载微调器,然后侦听“sync”,并设置如下标志。isReady=true并重新渲染实际视图