4

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        
    };
});
4

1 回答 1

6
  1. 您必须使用.then()而不是.done()修改有效负载。
  2. 您应该让您的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()处理移到应用程序中尽可能高的位置,以便错误消息中的措辞可以具有更准确的上下文。

PS 作为一个挑剔的人,您不应该使用 POST 请求而不是 GET 来创建实体吗?

于 2013-09-28T20:42:43.690 回答