2013-06-26 82 views
0

KnockoutJS with WebApi。當我嘗試使用自定義綁定時,我無法將綁定數據傳遞到自定義綁定函數中。KnockoutJS,WebApi,當我使用自定義綁定時,valueAccessor沒有值。

我現在頭撞了兩天,肯定在這裏丟失了一些東西。

任何指南,文章或示例代碼將不勝感激。非常感謝。

<script> 
function ViewModel() { 
    var self = this; 
    self.items = ko.observableArray(); 

    // This is getting data, and tested have data returned. 
    var baseUri = 'api/items'; 
    $.getJSON(baseUri, self.items); 
} 

$(document).ready(function() { 
    ko.bindingHandlers.testBinding = { 
     init: function (element, valueAccessor) { 
      var value = valueAccessor(); 
      var valueUnwrapped = ko.utils.unwrapObservable(value); 
      // This is always 0. 
      alert(valueUnwrapped.length); 
     }, 
     update: function (element, valueAccessor) { 
      var value = valueAccessor(); 
      var valueUnwrapped = ko.utils.unwrapObservable(value); 
      // This is always 0. 
      alert(valueUnwrapped.length); 
     } 
    }; 

    // Binding to Web Api data. 
    ko.applyBindings(new ViewModel()); 

    // Test it with static data, and custom binding works. The length displayed 2. 
    //var viewModel = { 
    // items: ko.observableArray([{name: "Bob1"}, {name: "Bob2"}]) 
    //}; 
    //ko.applyBindings(viewModel); 

}); 
</script> 
<div data-bind="testBinding: items"></div> 

回答

1

init將始終爲零,因爲數據填充async(因此,當您綁定數組時將爲空)。

更新應該是零一次,然後下一次返回正確的長度..

Test this little fiddle 

http://jsfiddle.net/SVQhR/

+0

異步!衛生署!使用'$ .ajaxSetup({async:false}); '最後解決問題。非常感謝。 –

+0

我會改爲像http://jsfiddle.net/SVQhR/1/ – Anders

+0

解決它我真的不知道加載數據需要多長時間,所以我認爲關閉異步會對我的情況更好。 –

相關問題