1

我正在創建一個個人網站使用杜蘭和敲除與下面的代碼綁定編輯的博客頁面。一切都很好,我能夠將文本區域與ajax調用的返回文本進行綁定。長阿賈克斯打電話打破淘汰賽綁定

一旦這樣做我很好奇,如果從WebService長的響應會打破它,所以我把在Thread.sleep代碼(1000)到服務,現在我不能讓它返回的文本結合文本區域。任何建議如何讓這個工作?

側面說明:我不認爲這有與迪朗達爾框架做的,但我想我會包括我這

的JavaScript

define(['services/logger', 'services/wysiwyg'], function (logger, wysiwyg) { 

var postObservable = ko.mapping.fromJS({}); 
var vm = { 
    activate: activate, 
    post: postObservable, 
}; 
return vm; 

function activate(routeData) { 
    var id = routeData.id; 
    $.ajax(
     { 
      type: "GET", 
      url: '/api/blog/get', 
      data: { id: id }, 
      dataType: "json", 
     }) 
    .then(function(data){ 
     ko.mapping.fromJS(data, postObservable); 
    }); 

    } 

}); 

C#

public class BlogController : ApiController 
    { 
     public IBlogRepository _blogRepository; 
     public BlogController(IBlogRepository blogRepository) 
     { 
      _blogRepository = blogRepository; 
     } 

     public BlogModel get(int id) 
     { 
      //Thread.Sleep(1000); <-- breaks when uncommented!!! 
      return ConvertToModel(_blogRepository.ById(id)); 
     } 

     private BlogModel ConvertToModel(BlogPost b) 
     { 
      return new BlogModel { DateCreated = b.DateCreated, Title = b.Title, Content = b.Content, Id = b.Id }; 
     } 
    } 

htm l

<section> 
    <div class="row"> 
     <textarea class="sceditor span12" data-bind="html: post.content"></textarea> 
    </div> 
    <div class="row"> 
     <button type="button" class="btn offset10 span1">Cancel</button> 
     <button type="button" class="btn btn-primary span1">Save</button> 
    </div> 
</section> 
+0

是否有任何綁定錯誤?你可以嘗試'var postObservable = ko.mapping.fromJS({content:''});' – nemesv

+0

沒有綁定錯誤。如果Thread.Sleep(1000)不在那裏,它可以很好地工作。 –

回答

5

ajax調用是一個異步任務,所以您應該返回一個承諾。這樣做會讓Durandal等到ajax通話結束。

return $.ajax(
    { 
     type: "GET", 
     url: '/api/blog/get', 
     data: { id: id }, 
     dataType: "json", 
    }) 
.then(function(data){ 
    ko.mapping.fromJS(data, postObservable); 
}); 
+0

工作就像一個魅力,謝謝!我花了一段時間纔看到代碼中的差異,因此對於那些有類似問題的人,只需在ajax之前放置一個返回值,並且它將同步執行。 –