2013-11-08 1 views
0

Я "м было поручено делать РОС KnockoutJS и бегу на вопрос, что я просто не могу понять.KnockoutJS Mapping от Ajax

Я хочу, чтобы извлечь данные из службы с помощью Ajax, а затем заполнить форма с ko.mapping.fromJS(). Моя форма не будет заполняться, когда я вызову отображение из функции успеха вызова ajax. Если я переведу его за пределы успеха, тогда он отлично работает.

ОБНОВЛЕНИЕ: I что функция загрузки действительно вызвана в моем jsfiddle (помещает предупреждение внутри, и она срабатывает), но форма не заполняется.

http://jsfiddle.net/Ud9ex/6/

var planDesignData = { 
     RecordID: '1124', 
     Name: "Main"    
    }; 


var PlanDesignModel = function() { 
var self = this;    

//*** As soon as I move this line inside the sucess the input doesn't get populated 
self.planDesign = ko.mapping.fromJS(planDesignData); 

self.load = function() { 
    $.ajax({ 
     type: "POST", 
     url: "/echo/json/", 
     contentType: "application/json; charset=utf-8", 
     dataType: "json",      
     success: function (data) {      
      var loadedPD = {}; 

      //I want to run the mapping here 

     } 
    }); 
} 
} 


$(document).ready(function() { 
      var viewModel = new PlanDesignModel(); 
      viewModel.load(); 
      ko.applyBindings(viewModel);  

     }); 

Любая помощь была бы принята с благодарностью.

+0

, что делать вы получите, если вы выполните console.log (данные) в функции успеха? – pax162

+0

Ну, в моем jsfiddle я ничего не получаю. Если я сделаю это на своем локальном, я смогу увидеть данные. –

ответ

-2

Вот example

Все, что вам нужно сделать, это отправить данные в /echo/json.

я сделал в этом примере defer:

$(document).ready(function() { 
    var viewModel = new PlanDesignModel(); 
    $.when(viewModel.load).always(function(){ 
     ko.applyBindings(viewModel); 
    }); 
}); 

Но все работает просто отлично:

success: function (data) { 
      var loadedPD = {}; 
      console.log(data); 
      self.planDesign = ko.mapping.fromJS(planDesignData); 
      //I want to run the mapping here 

     } 

Заметьте, я поставил 1 секундную задержку:

data: { 
      json: JSON.stringify({ 
       RecordID: '1124', 
       Name: "Main" 
      }), 
      delay: 1 
     }, 
+0

Работает ли это с GET? У меня нет данных изначально. У меня все еще есть проблемы с этим. – Vyache

+0

Я, возможно, не самая лучшая идея использовать жестко закодированные задержки. Обратное обращение будет лучшим решением здесь. – sandrooco