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来创建实体吗?

08-07 15:54