Backbone.js - 从集合中获取id创建

时间:2012-07-24 09:37:11

标签: backbone.js backbone.js-collections

我使用create方法将一个模型添加到集合中,并且api响应得很好。该模型似乎已正确返回,并查看我正在寻找的console.dir( resp );。但是,当我尝试访问runningorderid时,id定义为idAttribute时,响应为空。我认为这与响应的异步性质有关,但我不知道如何处理它。

var resp = window.app.RunningOrderCollection.create(
        { runningorderid: null, listitemid: 1, starttime: n} , 
        { wait: true }
);
console.dir( resp );
console.dir( resp.get("strt") );
console.dir( resp.id );

screenscape of problem

2 个答案:

答案 0 :(得分:2)

collection.create,因为与服务器请求相关的所有方法确实是异步的。在您的情况下,您可以收听同步事件以获得所需的结果。

来自http://backbonejs.org/#Collection-create

  

创建模型将导致立即触发“添加”事件   关于集合,以及“同步”事件,一旦模型一直存在   在服务器上成功创建。

例如:

resp.on('sync', function(model) {
  console.dir( resp );
  console.dir( resp.get("strt") );
  console.dir( resp.id );
});

答案 1 :(得分:2)

要绕过集合和模型的服务器操作的异步性质,请将操作后要执行的操作绑定到这些操作完成时触发的事件。例如,backbone.js文档有the following to say关于Collection的create - 函数:

  

创建模型将导致在集合上触发立即“添加”事件,以及在服务器上成功创建模型后的“同步”事件。如果您想在将新模型添加到集合之前等待服务器,请传递{wait:true}。

因此,您已经通过了{wait:true},因此当在服务器上创建模型并将其添加到集合中时,集合将触发add事件。有了这个逻辑:

window.app.RunningOrderCollection.on('add', function(resp) {
  console.dir( resp );
  console.dir( resp.get("strt") );
  console.dir( resp.id );
});
var model = window.app.RunningOrderCollection.create(
  { runningorderid: null, listitemid: 1, starttime: n} , 
  { wait: true }
);

查看backbone.js文档中的优秀catalog of events以获取更多信息!

希望这有帮助!