KnockoutJS,WebApi,当我使用自定义绑定时,valueAccessor没有值。

时间:2013-06-26 12:36:30

标签: knockout.js asp.net-web-api custom-binding

使用WebApi进行KnockoutJS。当我尝试使用自定义绑定时,我无法将绑定数据传递到自定义绑定函数中。

我现在已经敲了两天,肯定在这里错过了什么。

非常感谢任何指南,文章或示例代码。非常感谢。

<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 个答案:

答案 0 :(得分:1)

init将始终为零,因为数据填充为异步(因此,当您对数组进行数据绑定时将为空)。

更新应为零一次,然后下次返回正确的长度..

Test this little fiddle

http://jsfiddle.net/SVQhR/