0

我正在使用以下代码测试 Backbone 的 Localstorage。保存模型后,它应该创建一个 id 和一个可在 Model.cid 中访问的 cid。它在控制台中记录 id(见下文),但不是 cid。这是一个重现问题的小提琴http://jsfiddle.net/mjmitche/haE9K/2/

谁能看到我做错了什么?

// Model Creation with defaults
var Todo = Backbone.Model.extend({

  localStorage: new Backbone.LocalStorage("todos"), 
  defaults: {
       title:'new todo...',
       description:'missing...',
       done:false
  }
});

var myTodo = new Todo({}); 

console.log("Before save id:"+myTodo.get('id')); // Unique Id from Server
console.log("Before save cid:"+myTodo.cid); // Client side id
myTodo.save(); 

console.log(myTodo.get('title'));
console.log("After save id:"+myTodo.get('id'));
console.log("After save cid:"+myTodo.cid);

控制台结果

Before save id:undefined app.js:16
Before save cid:c0 app.js:17
new todo... app.js:20
After save id:99bc7f4c-8837-39f4-91e9-90760d8ee8cd app.js:21
After save cid:c0 app.js:22
4

1 回答 1

2

cid 是在创建模型时创建的,然后永远不会更改。请参阅文档:

模型的一个特殊属性,cid 或客户端 id 是第一次创建模型时自动分配给所有模型的唯一标识符

让我们看一下Backbone.Model的构造函数:

  var Model = Backbone.Model = function(attributes, options) {
    .
    .
    .
    this.cid = _.uniqueId('c');
    .
    .
    .
  };

如您所见,cid 是使用下划线 uniqueId 方法创建的。

于 2012-09-22T21:13:46.680 回答