【问题标题】:knockout data from AJAX call doesn't bind来自 AJAX 调用的淘汰赛数据不绑定
【发布时间】:2015-05-28 02:59:01
【问题描述】:

我对淘汰赛还很陌生,并试图弄清楚为什么以下方法不起作用。由于某种原因,我从 ajax 调用返回的数据没有被转换为数组。

我有一个返回 JSON 的函数

bankingApi.client = (function () {

var getSafeFloatCash= function getSafeFloatCash() {
    return $.ajax({
        url: '/BackOffice/Banking/Banking/GetSafeFloat',
        type: 'GET'        
    });
}
    return {
        getSafeFloatCash : getSafeFloatCash
    };
})();

该函数返回以下 JSON:

[{"Denomination":"1p","Value":34.1200},{"Denomination":"2p","Value":98.0400},{"Denomination":"5p","Value":85.0500},{"Denomination":"10p","Value":571.2000},{"Denomination":"20p","Value":62.8000},{"Denomination":"50p","Value":57.5000},{"Denomination":"£1","Value":441.0000},{"Denomination":"£2","Value":398.0000},{"Denomination":"£5","Value":260.0000},{"Denomination":"£10","Value":320.0000},{"Denomination":"£20","Value":780.0000},{"Denomination":"£50","Value":350.0000}]

我设置了我的可观察数组

(function () {

var BankingViewModel = function () {
    var self = this;
    self.safeFloatDenominations = ko.observableArray();

    var safeFloatCash = bankingApi.client.getSafeFloatCash();
    self.safeFloatDenominations(safeFloatCash); // does not work!

    self.safeTopUpValue = ko.computed(function () {
        var total = self.floatRecommendedValue - self.safeFloatTotal;
        return total.toFixed(0);
    });        
}

$(document).ready(function () {
    var viewModel = new BankingViewModel();        
        ko.applyBindings(viewModel);        
});

})();

如果我将从 ajax 调用返回的值粘贴到数组变量中,它可以正常工作,因此将函数调用转换为数组时会出现一些问题。

这就是风景

  <div class="row" data-bind="visible: safeTopUpValue()>0, foreach:     safeFloatDenominations">
<div class="col-xs-5">
    <input type="text" data-bind="value: Value" />
    <label data-bind="text: Denomination"></label>
</div>

【问题讨论】:

  • 您没有将从 ajax 调用返回的数据分配给 observableArray。您将从$.ajax 返回的 promise 分配给它。您需要在某处使用回调方法来实际从 ajax 调用中获取数据

标签: javascript ajax knockout.js


【解决方案1】:

根据我的评论,$.ajax 不返回数据 - 它返回一个承诺。您需要使用它来实际获取数据:

var safeFloatCash = bankingApi.client.getSafeFloatCash();
safeFloatCash.done(function(d) {
    //may need to parse the data:
    //d = JSON.parse(d);
    self.safeFloatDenominations(d);
});

【讨论】:

  • 这是有道理的。认为我仍然需要将它放在某个地方调用的函数中?
  • @jazza1000 不-只需将我的答案中的代码换成您的两行原始代码即可
猜你喜欢
  • 2016-02-12
  • 2013-04-09
  • 1970-01-01
  • 1970-01-01
  • 2013-12-30
  • 2014-03-19
  • 2013-02-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多