var viewmodel = service.createCustomer();
是我调用requirejs模块的方式。
我该如何创建一个延迟对象,使我的createCustomer返回在服务调用内部创建的CreateCustomerViewModel?
define(['viewmodels/CreateCustomerViewModel'],function (CreateCustomerViewModel) {
function createCustomer() {
$.getJSON('Customer/Create')
.done(function (response) {
return new CreateCustomerViewModel(response);
})
.fail(function (error) {
alert(error);
});
}
return {
createCustomer: createCustomer
};
});
最佳答案
您必须使用.then()
而不是.done()
来修改有效负载。
您应该让您的createCustomer
方法返回修改后的有效负载。
您的模块定义变为:
function createCustomer() {
return $.getJSON('Customer/Create')
.then(function (response) {
return new CreateCustomerViewModel(response);
});
}
return {
createCustomer: createCustomer
};
用于:
customerCreator.createCustomer()
.done(function (model) {
// yay! let's use this model
})
.fail(function () {
console.error("Cannot create customer");
});
您还应该将
.fail()
处理移到应用程序外部,并尽可能地移到应用程序的较高位置,以使错误消息中的措词可以具有更准确的上下文。附言作为nitpick,您不应该使用POST请求而不是GET来创建实体吗?