在我的视图下面的方法中,如果我正确理解create()
方法,我的模型将与服务器同步。但是,console.log
的{{1}}仍会返回this.model.id
而undefined
会返回this.model.isNew()
。 POST在返回的JSON对象中显示一个id,模型对象属性也显示一个id,那么为什么它们在模型中没有正确反映?我需要在创建新视图时设置id。
true
答案 0 :(得分:4)
所以Jacob,这里的问题只是在渲染你的视图之前,你需要等待来自服务器的响应。您的this.model.id
将为undefined
,因为您的模型是新的,这意味着它尚未保存在服务器中。
因此,您可以做的是使用success
函数中的.create
回调。我相信这样的事情对你有用。
if (this.model.isNew()) {
collection.create({
// or you can use this.model (if it is an object)
attribute_x: 'val',
attribute_y: 'val'
}, success: function(response){
// here your model with have an id
console.log(response);
new MyView({
model: response.model // check your response
}).render().appendNode();
});
} else {
new MyView({
model: this.model
}).render().appendNode();
}
因此,正如您所看到的,在success
回调中,我们呈现了View
。如果您console.log
回复,您将会看到您的后端在创建模型时对您做出的回应。
答案 1 :(得分:3)
如果需要,可以在调用{ wait: true }
时使用create()
选项;这样,模型就不会被添加到集合中,直到它成功保存为止。
将这一点与其余的逻辑相结合发生在集合的add
事件上可能需要很长的路要走。如果您需要能够区分新的create
' d模型以及稍后添加到集合中的模型,您可以为create
调用添加其他选项(例如newlySaved: true
,然后在添加事件回调中检查options.newlySaved
。