为什么pluck()和where()方法不起作用?

时间:2013-11-24 15:41:46

标签: javascript backbone.js

为什么pluck()where()方法不起作用?

var Model = Backbone.Model.extend({
    name:'sasha',
    time:'now',id:67            
})

var model = new Model;

var Model2 = Backbone.Model.extend({
    name:'andrii',
    time:'now',id:45
})

var model2 = new Model2;

var Model3 = Backbone.Model.extend({
    name:'sergii',
    time:'now',id:7            
})

var model3 = new Model3;

var Library = Backbone.Collection.extend({
    initialize:function(){console.log('init')}
})

var lib = new Library([model]);

lib.on('add',function(){
    console.log('add event')
})

lib.on('reset',function(){
    console.log('reset event')
})

lib.on('remove',function(){
    console.log('rremove event')
})

lib.push(model);
lib.push(model2);
lib.push(model3);

pluck方法在返回用户名时返回undefined值数组。

var names = lib.pluck("name");//[undefined, undefined, undefined]

where返回一个空数组而不是id为7的模型。

var wh = lib.where({id:7}) //[]

1 个答案:

答案 0 :(得分:6)

这不是模特的工作方式。您应该使用Backbone.Model.extend来定义模型结构,然后创建它的新实例来表示数据。

var Person = Backbone.Model.extend({
    /* your custom methods here */
});

var person1 = new Person({
    id: 67,
    name: 'sasha'
});

var person2 = new Person({
    id: 45,
    name: 'andrii'
});

var person3 = new Person({
    id: 7,
    name: 'sergii'
});

创建集合时,您可以定义正在使用的模型:

var Library = Backbone.Collection.extend({
    model: Person
});

var lib = new Library();
lib.push(person1);
lib.push(person2);
lib.push(person3);

使用它应该按预期工作:

var names = lib.pluck('name'); // ["sasha", "andrii", "sergii"]
var wh = lib.where({id: 7}); // [{"id": 7, ...}]