Backbone" new"集合未创建新对象

时间:2015-04-30 21:50:26

标签: backbone.js

我正在构建一个使用RequireJS和Backbone的单页应用。 我有多个数据端点,我使用Backbone进行管理。

我有一个用于构建URL的集合,并在获取URL之前为URL附加唯一ID。

该集合的定义如下:

define([
'underscore',
'backbone', 
'models/MyModel'
], function(_, Backbone, MyModel){
console.log('test'+id);
var Data = Backbone.Collection.extend({
  model: MyModel,
  url: '/getData/?id='+id,
  parse: function(response) {
    return response;
  }
});        

return Data;
});

它的用法如下:

function retrieveData() {
require(['collections/MyData'],
    function(MyData) {
        // create model
        var data = new MyData(var:myVars});

        // fetch data
        data.fetch({async: false});

        //...
    }
);

}

一切都相当简单。 然而,当我创建模型时,我出现了问题。 URL用于查询服务器的ID在后台更改,并且在调用时调用retrieveData()。 在代码的第一次传递中,模型被创建,我已经验证了这是" console.log(' test' + id);"打印到控制台。 但是,当我再次调用retrieveData()时(在id更改之后),执行代码以创建新模型,但是Backbone似乎从第一次传递返回已经实例化的模型而不是创建新模型,因此URL不会获取新ID的更新。 "的console.log('测试&#39 + ID);"不会在任何传递条上打印到控制台,因为没有创建对象并且没有输入功能。

我是否已将某些工作挂钩或者是否存在某种缓存?

由于

1 个答案:

答案 0 :(得分:1)

您的问题似乎是在创建集合原型时尝试创建id,但创建您MyData集合的代码只运行一次。

更好的方法可能是在实例化期间提供id

这样的事情:

define([
'underscore',
'backbone', 
'models/MyModel'
], function(_, Backbone, MyModel){
var Data = Backbone.Collection.extend({
  model: MyModel,
  initialize: function(options) {
    this.id = options.id;
  },
  url: function() {
    return '/getData/?id=' + this.id
  },
  parse: function(response) {
    return response;
  }
});        

return Data;
});

function retrieveData() {
require(['collections/MyData'],
    function(MyData) {
        // create model
        var data = new MyData({ var:myVars, id: id });

        // fetch data
        data.fetch({async: false});

        //...
    }
);