Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/74.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/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 在不使用Backbone.js删除以前的内容模型的情况下在同一位置替换内容是否正确?_Javascript_Jquery_Backbone.js - Fatal编程技术网

Javascript 在不使用Backbone.js删除以前的内容模型的情况下在同一位置替换内容是否正确?

Javascript 在不使用Backbone.js删除以前的内容模型的情况下在同一位置替换内容是否正确?,javascript,jquery,backbone.js,Javascript,Jquery,Backbone.js,我有一个用Backbone.js开发的web应用程序。在应用程序中,有一些按钮可以在按下时删除内容视图,但不会删除内容模型。例如,如果我多次按下同一按钮,内容将被替换,但该内容的模型不会被删除。 我怎样才能删除它 我知道如何使用其他不同的按钮删除内容,但如果按下相同的按钮(或其他不是要删除而是要添加的按钮),我不知道如何删除内容。 示例代码: HTML: Javascript使用垃圾收集系统进行内存管理。这意味着您只需删除对它的所有引用就可以删除任何内容(从技术上讲,在垃圾收集器访问它之前,它实

我有一个用Backbone.js开发的web应用程序。在应用程序中,有一些按钮可以在按下时删除内容视图,但不会删除内容模型。例如,如果我多次按下同一按钮,内容将被替换,但该内容的模型不会被删除。 我怎样才能删除它

我知道如何使用其他不同的按钮删除内容,但如果按下相同的按钮(或其他不是要删除而是要添加的按钮),我不知道如何删除内容。
示例代码: HTML:


Javascript使用垃圾收集系统进行内存管理。这意味着您只需删除对它的所有引用就可以删除任何内容(从技术上讲,在垃圾收集器访问它之前,它实际上不会被删除,但本质上它是被删除的)

因此,如果要确保删除模型,不需要调用任何特殊方法,只需对引用该模型的每个视图(或代码中的其他位置)执行
delete someView.model

如果查看
Backbone.View
上的
remove
方法,实际上可以在实践中看到所有这些。您会发现它真正做的(除了触发事件之外)就是调用一个内部方法
\u removeReference
\u removeReference
做什么?这:

  if (this == model.collection) {
    delete model.collection;
  }
  // (there's also an event-related line here)

现在,所有这些,如果你正在制作一个新的视图来替换一个旧的视图,并且它们都有相同的模型。。。首先,你可能不应该提出新的观点。处理此类情况的更标准的主干方法是在视图上重新调用渲染(而不是创建新的渲染)。

您的确切问题是什么?请支持@amchang87,这个问题有点难以理解。类似这样的东西“我知道如何用其他不同的按钮删除内容,但我不知道如果按下同一个按钮(或其他按钮不是注定要删除,而是要添加),如何删除内容。”甚至不是有效的英语。无论如何,我都试图回答这个问题,但老实说,我不确定我的回答是否回答了您的问题。参考代码:单击
.ShowCam
时,会将模型添加到集合中,并创建和呈现视图。如果再次单击
ShowCam
,则会将模型添加到集合中,并再次创建和重新绘制视图,但不会删除以前的模型,只删除带有
$(“div.camBox”).empty()的视图(我想)。但是,如果单击了
.camClose
,则当前模型将从集合中删除,但如果单击了
.anotherButton
或多次单击了
ShowCam
,则不会删除。我想删除未使用的模型,如果它更正确的话。你明白我的意思吗?对不起,我说的是英语。如果多次单击
.ShowCam
,则会解除单击事件的绑定,但如果单击了
.anotherButton
,则不会删除以前的型号。需要提高效率吗?嗨。谢谢你的回复。现在,当单击按钮时,应用程序将创建一个新的模型和视图。那么,是否可以重新调用渲染上述视图?可能是id?这取决于如何编写渲染方法。如果它只是一个
this.$el.html(…
),那么您完全可以重新渲染它。如果您在事后访问视图时遇到问题,您可以始终将其存储在jQuery数据中:
this.$el.data('view',this)
var camContent = Backbone.View.extend({
        el: "body",     
    events: {
        "click .ShowCam": "addContentCam", 
                "click .anotherButton": "otherAddContentFunction"                   
    },          
    initialize: function() {
        _.bindAll(this);
        this.model = new ContentCollection();
        this.model.on("add", this.contentAdded);
        this.model.on("remove", this.removeContentCam); 
    },                  
    addContentCam: function(event) {
        this.model.add({ modelName: "IPcam"});          
    contentAdded: function(content) {
        if (content.view == null) {
           var templ_name = 'cam';                                                  
           content.view = new ContentView({
                  model: content,
                  template: $.trim($("[data-template='"+ templ_name +"'] div").html() || "Template not found!")});
           $("div.camBox").empty(); 
           this.$el.find(".content").find("div.camBox").append(content.view.render().el);                                           
        }                   
    },  
    removeContentCam: function(content) {
        if (content.view != null) { 
            content.view.remove();              
        }
        content.clear();  //Clear the properties of the model   
    }   
}); 
var ContentView = Backbone.View.extend({
    tagName: "div",
    template: null,
    events: {
          "click .camClose": "removeView" 
    },
    initialize: function() {
        _.bindAll(this);
        this.template = this.options.template; 
    },
    render: function() {        
        this.$el.html(Mustache.render(this.template, this.model.toJSON())); 
        return this; 
    },
    removeView: function() {
        this.model.collection.remove(this.model); //Remove the model of the collection
    }
});
  if (this == model.collection) {
    delete model.collection;
  }
  // (there's also an event-related line here)