4

我有一个模型监听事件​​的发泄,update:TotalCost当属于集合 C 的任何模型 M 发生更改时,它从(不相关的)集合 C 触发。

此事件在初始化方法中编码,如下所示。收到事件后,我收到以下错误:

TypeError: this.set 不是函数
this.set({ "totalsale": value});

CostModel = Backbone.Model.extend({     
  defaults: {
    totalSale: 0,
    totalTax: 0
  },

  initialize: function(attrs, options) {
    if(options) {
      if(options.vent) {
        this.vent = options.vent;
      }
    }
            
    this.vent.on("update:TotalCost", function(value) {
      this.set({ "totalSale": value}); **//ERROR HERE**
    });
  }
});
4

7 回答 7

12

您很可能忘记new在模型之前添加关键字,例如:

var user = UserModel();

// instead of 

var user = new UserModel();
于 2016-03-31T00:21:15.103 回答
3

您是否尝试过使用闭包?

CostModel = Backbone.Model.extend({     
  defaults: {
    totalSale: 0,
    totalTax: 0
  },
  initialize: function(attrs, options) {
    var self = this;

    if(options) {
      if(options.vent) {
        this.vent = options.vent;
      }
    }

    this.vent.on("update:TotalCost", function(value) {
      self.set({ "totalSale": value}); 
    });
  }
});
于 2013-05-03T13:02:33.287 回答
3

也许您想this引用当前CostModel实例,为此您需要传递thisthis.vent.oncall 以便事件回调将在模型的上下文中执行:

this.vent.on("update:TotalCost", function(value) {
    this.set({ "totalSale": value});
}, this);
于 2013-05-03T12:10:55.353 回答
1

这可能是由于“设置”适用于模型而不是对象。所以你可以,首先将你的对象转换为模型然后尝试..

例如:

new Backbone.Model(your_object).set('val', var);
于 2017-04-07T09:42:22.823 回答
0

此错误的另一个原因可能是您尝试在不使用“new”关键字的情况下创建新模型

于 2015-03-19T09:45:51.690 回答
0

与 Parse 一起使用时,我遇到了这个神秘的错误。我有:

Parse.User().current().escape("facebookID")

...当我应该有的时候:

Parse.User.current().escape("facebookID")

删除了额外的 () ,现在可以正常工作了。

于 2015-05-30T17:26:38.823 回答
0

另一个原因:

// render() method in view object
setInterval(this.model.showName, 3000);

// showName() method in model object
showName: function(){
    console.log(this.get('name')); // this.get is not a function
}
于 2017-03-22T23:14:19.460 回答