2013-09-28 3 views
4

var viewmodel = service.createCustomer();은 requirejs 모듈을 호출하는 방법입니다.promise/ajax 호출에서 jquery를 사용하여 값을 반환하십시오.

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

답변

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() 외부 처리까지 높은 이동해야합니다되도록 표현 오류 메시지에 더 정확한 컨텍스트를 가질 수 있습니다.

P. nitpick으로 엔티티를 만들기 위해 GET 대신 POST 요청을 사용해서는 안됩니까?

+0

2 가지 : var를 통해 반환 값을 얻고 싶습니다. viewmodel = service.createCustomer() .done .fail은 서비스 오류 일 수 있기 때문에 서비스 내에 있어야합니다. 뷰 모델은 그것을 모릅니다. 더 이상 그 GET 요청은 데이터를 게시하지 않기 때문에 formular에 대한 데이터를 검색 한 후 나중에 게시 할 것입니다 ;-) – Elisabeth

+0

'$ .getJSON'은 비동기식이므로 'viewmodel = service.createCustomer() '. 고전 콜백 또는 약속 (더 나은) 중 하나를 사용해야합니다. –

+1

jQuery를 사용하는 경우 <1.8은'then' 대신'pipe'를 사용합니다. 나는 이것을 처리하는 데 몇 시간을 낭비했다. – nikoskip

관련 문제