骨干:同步后的cid?

时间:2012-09-22 21:05:24

标签: backbone.js

我使用以下代码测试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

1 个答案:

答案 0 :(得分:2)

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

  

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

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

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

如您所见,使用下划线uniqueId方法在那里创建了cid。