如何调用传递Id的Backbone Collection的fetch方法

时间:2013-11-30 21:31:50

标签: backbone.js backbone-views

我想在Backbone Collection上触发fetch方法,该方法会传递类似于Model.fetch(id)中所发生的Id参数

E.g。

var someFoo= new Foo({id: '1234'});// Where Foo is a Backbone Model
someFoo.fetch();

My Backbone系列: -

var tasks = backbone.Collection.extend({
    model: taskModel,
    url: '/MyController/GetTasks',
    initialize: function () {
        return this;
    }
});

当我尝试获取数据时,在我的视图中: -

var _dummyId = 10; //

// Tried approach 1 && It calls an api without any `id` parameter, so I get 500 (Internal Server Error).
this.collection.fetch(_dummyId); 


// Tried approach 2 && which fires API call passing Id, but just after that 
// I am getting error as below:- Uncaught TypeError: object is not a function
this.collection.fetch({
    data: {
        id: _dummyId
    }
});

发现它很晚:为了缩短上面的故事,我想要像Get /collection/id in backbone这样的东西。

2 个答案:

答案 0 :(得分:9)

感谢您的回答,最后我从Backbone.js collection options得到了解决方案。

道歉,我无法正确解释这个问题,而对于同样的要求,其他人已经做得非常聪明。

解决方案:我可以拥有类似的东西: -

var Messages = Backbone.Collection.extend({
  initialize: function(models, options) {
    this.id = options.id;
  },
  url: function() {
    return '/messages/' + this.id;
  },
  model: Message,
});

var collection = new Messages([], { id: 2 });
collection.fetch();

感谢nrabinowitzLink to the Answer

答案 1 :(得分:1)

正如Matt Ball所提到的,问题没有意义:要么在集合上调用fetch()以从服务器检索所有模型,要么在具有ID的模型上调用fetch()以仅检索这个。

现在,如果由于某种原因你需要将额外的参数传递给Collection.fetch()(例如分页信息),你总是可以在你的选项对象中添加一个'data'键,它可能会发生这个键之一是一个id(+ add选项来添加这个获取的模型,而不是只用一个模型替换集合)......但这将是一个非常全面的获取模型的方法。预期的方法是创建一个带有id的新模型并获取它:

this.collection = new taskCollection();
newTask = this.collection.add({id: 15002});
newTask.fetch();

在你的代码中,我没有看到ID来自哪里,所以我想知道你希望在'ID'参数中你希望collection.fetch()发送什么?