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

bho*_*hhi 3 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... 
        });     
    }
});
Run Code Online (Sandbox Code Playgroud)

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

Wil*_*Haw 5

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

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

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

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