我使用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 );
答案 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以获取更多信息!
希望这有帮助!