model不是模型的实例,但具有特定实例的属性

时间:2015-04-20 15:56:43

标签: javascript backbone.js ecmascript-6

考虑问题的最佳方法是根据Backbone TodoMVC应用程序来考虑它(即使这不是我正在做的事情,它的相似之处在于它有一个主视图和许多列表视图)。如果你在Todo模型上声明了一个自定义destroy方法(比如我下面的那个)并点击一个视图来删除它,那么在触发的方法中(调用this.model.destroy),你无法在模型上调用自定义destroy方法,因为this.model不是模型的实例。以某种方式调用this.model.destroy

     clear: function () {    //in the todo app, this method is called clear
        this.model.destroy(); 
    } 

用于销毁模型,但如果您尝试调用自定义destroy方法则不行。

下面,我就我的应用程序解释相同的内容。

我有一个使用服务器端存储的Backbone应用程序,但无法向服务器发送删除请求。使用另一个SO答案,我在模型上创建了一个自定义destroy方法(FunkyModel如下所示),我尝试在视图中的deleteModel方法中调用该自定义destroy方法,但无济于事。

然而,它并没有在FunkyModel上调用自定义destroy方法。当我检查this.model时,它并没有说它是FunkyModel的实例,而是只说Backbone.Model然后列出模型的属性。所以很明显它不是FunkyModel的一个实例,因此它不能在FunkyModel上调用自定义destroy方法,但同时在attributes属性下,它具有FunkyModel实例的所有属性,这并不奇怪。

问题:模型如何具有模型实例所独有的属性,但不是该模型的实例,而是简单的Backbone.Model

更多信息: 该应用程序的结构类似于BackboneMVC Todo App,因为它有一个主视图,然后它将更多视图作为列表项附加。当我单击其中一个视图上的删除符号时,它会触发一个调用deleteModel方法的事件,我调用该方法

 deleteModel(e){
         this.model.destroy();
     }

当然,根据我点击的列表视图,this.model的属性会有所不同,但在任何情况下都不是模型的实例。它只是一个Backbone.Model,它的属性具有特定实例的属性。我不确定不是实例的模型如何在其属性中具有来自特定实例的属性。

模型

  export class FunkyModel extends Model{

     defaults(){
               return {
                      name: '',
                      type: ''
             }

            }

     addToCollection(){
                   collection.add(this);
                   this.save();
         }
      destroy(options){
           var opts = _.extend({url: '/api/'}, options || {});
           console.log("never getting run");
           return Backbone.Model.prototype.destroy.call(this, opts);

       }
     }

视图

 deleteModel(e){
     this.model.destroy({success: function(model, response, xhr){
          console.log(model,xhr, options, "success callback") //xhr is undefined
       },
       error: function(model, xhr,options){ 
           console.log(model,xhr,options, "error callback")
      }
 }

更多信息

创建模型时,我会

this.model = new FunkyModel();
this.model.set({"type": "funky"})

当模型被保存时,它会被添加到集合中(上面原始OP中显示的代码)。我想知道当我调用this.model.destroy()时,它只是在从集合中删除它时才会销毁它(因此触发了成功回调)。

0 个答案:

没有答案