Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/474.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 主干视图具有错误的el_Javascript_Jquery_Backbone.js - Fatal编程技术网

Javascript 主干视图具有错误的el

Javascript 主干视图具有错误的el,javascript,jquery,backbone.js,Javascript,Jquery,Backbone.js,我将所有正在上传的文件FileUploadProgressModel存储在主干集合UploadProgressCollection上。除了我的视图UploadPrograssView上的这个。$el之外,我的一切都正常工作。我已将页面的$el标记初始化为 我希望this.$el成为我的HTML页面的主体元素,相反,它有一个全新的HTMLElement。现在我无法使用this访问我的上传进度条元素。$el,因为this。$el不是我想要的标记。是什么导致了这个错误 var FileUploadPr

我将所有正在上传的文件FileUploadProgressModel存储在主干集合UploadProgressCollection上。除了我的视图UploadPrograssView上的
这个。$el
之外,我的一切都正常工作。我已将页面的
$el
标记初始化为

我希望
this.$el
成为我的HTML页面的主体元素,相反,它有一个全新的
HTMLElement。现在我无法使用
this访问我的上传进度条元素。$el
,因为
this。$el
不是我想要的
标记。是什么导致了这个错误

var FileUploadProgressModel = Backbone.Model.extend({
    initialize : function(){
        this.on("change:loaded_size", function(){
            this.set("progress", 100 * this.get("loaded_size") / this.get("total_size"));
        });
    },
    defaults : {
        progress : 0,
        total_size: 1,
        loaded_size : 0,

    }
});
var UploadProgressCollection = Backbone.Collection.extend({
    model: FileUploadProgressModel,
    initialize : function(){
    this.on("update", function(){
        // View already registered to this event
    });
},
});


var UploadPrograssView = Backbone.View.extend({ 
    tagName : "body",
    initialize : function(){
        _.bindAll(this, "render");
        this.model.bind('change', this.render);
        this.render();
    },
    render : function(){

        var total_loaded_size = 0;
        var total_file_upload_size = 0;
        tracker.forEach(function(model){
            if(!isNaN(model.get("loaded_size"))) total_loaded_size += model.get("loaded_size");
            if(!isNaN(model.get("total_size"))) total_file_upload_size += model.get("total_size");
        });

        var progress = parseInt(total_loaded_size / total_file_upload_size * 100, 10) + '%';

        //TODO bad way of doing things. I want to user this.$el but it has lost the actual referance to the body instread it has this new HTML element "<body><body>"
        $('.progress .progress-bar').css(
                'width',
                progress
                );
        return this;
    }
});


var tracker = new UploadProgressCollection();
var trackerView = new UploadPrograssView({model : tracker });
var FileUploadProgressModel=Backbone.Model.extend({
初始化:函数(){
this.on(“更改:加载的大小”,函数(){
this.set(“进度”,100*this.get(“加载的大小”)/this.get(“总大小”);
});
},
默认值:{
进展:0,
总尺寸:1,
加载的\u大小:0,
}
});
var UploadProgressCollection=Backbone.Collection.extend({
型号:FileUploadProgressModel,
初始化:函数(){
this.on(“update”,function()){
//视图已注册到此事件
});
},
});
var UploadPrograssView=Backbone.View.extend({
标记名:“主体”,
初始化:函数(){
_.bindAll(本“呈现”);
this.model.bind('change',this.render);
这个。render();
},
render:function(){
变量总加载大小=0;
var total_file_upload_size=0;
tracker.forEach(函数(模型){
如果(!isNaN(model.get(“加载的大小”))总计加载的大小+=model.get(“加载的大小”);
如果(!isNaN(model.get(“total_size”))total_file_upload_size+=model.get(“total_size”);
});
var progress=parseInt(总加载大小/总文件上传大小*100,10)+'%';
//TODO做事情的方式不好。我想使用它。$el但它失去了对正文的实际引用,而它有这个新的HTML元素“”
$('.progress.progress bar').css(
“宽度”,
进步
);
归还这个;
}
});
var tracker=new UploadProgressCollection();
var trackerView=newuploadprograssview({model:tracker});

如果希望视图引用DOM中已经存在的元素,则必须明确地为视图指定
el
属性。如果指定了
标记名
属性,则会创建一个新的元素。有关更多详细信息,请参阅

因此,在声明视图时,必须将
el
设置为DOM选择器字符串:

var UploadPrograssView = Backbone.View.extend({ 
    el: "body",
    ...
});

如果希望视图引用DOM中已经存在的元素,则必须显式地为视图指定
el
属性。如果指定了
标记名
属性,则会创建一个新的元素。有关更多详细信息,请参阅

因此,在声明视图时,必须将
el
设置为DOM选择器字符串:

var UploadPrograssView = Backbone.View.extend({ 
    el: "body",
    ...
});

标记本身作为视图不是一个好主意。清除视图可能会清除所有内容,如脚本标记、插件注入的内容等。在
中添加容器并对其进行操作。将
标记本身作为视图不是一个好主意。清除视图可能会清除所有内容,如脚本标记、插件注入的内容等。在
中添加容器并对其进行操作。它们的API太丰富了,糟糕的是,我以前没有通过下载按钮。他在跟着一本书学习。这很有效。感谢他们的API是如此丰富,糟糕的是,我没有看通过下载按钮之前。他在跟着一本书学习。这很有效。谢谢