无法在骨干模型上调用自定义方法

时间:2012-02-29 07:17:29

标签: javascript backbone.js

我的模特和系列看起来像这样。

var MyModel= Backbone.Model.Extend({

    foo: function(){
         alert("is not working...");
    }
});

var MyCol = Backbone.Collection.extend({

    models:MyModel,
    url: function(){ return '/json_from_server' },  //json data mapped to MyModel
    poo:function(){
      alert("this works");
    }   
});

cols = new MyCol();

cols.fetch({

    success:function () {
    cols.poo(); //this works fine
        cols.models.forEach(function(item){
            alert(item.get("id")); //It works fine
            alert(item.foo());   // this is not working... 
        });     
    }
});

当调用item.foo()时,浏览器会抛出错误:Uncaught TypeError:Object [object Object]没有方法' foo' 任何人都可以帮我弄清楚这里出了什么问题。

2 个答案:

答案 0 :(得分:5)

MyCol对象中,设置models: MyModel。我认为模型不应该是复数,所以它应该是model: MyModel

如果仍然无效,您可能需要在MyModel中使用_.bindAll,如下所示:

var MyModel= Backbone.Model.Extend({
    initialize: function() {
         _.bindAll(this, "foo");
    },
    foo: function(){
         alert("is not working...");
    }
});

你的初始化不能提前工作的原因是因为如上所述,你应该将“模型”作为复数,而它应该是model

答案 1 :(得分:4)

在初始化中添加bindAll应修复它。

var MyModel= Backbone.Model.Extend({
    initialize: function() {
        _.bindAll(this);
    },
    foo: function(){
        alert("is not working...");
    }
});