从数组中读取的敲除javascript函数

knockout javascript function to read from an array

本文关键字:javascript 函数 数组 读取      更新时间:2023-09-26

我是敲除的新手,我正在尝试创建一个可以在视图中绑定的函数,这样不同的输入框将绑定到数组的不同元素。

不幸的是,在敲除中调用函数的代码似乎发生在数组填充之前。我确信有一些简单的方法可以解决这个问题,但我已经尝试了一段时间,就是无法解决

(function () {
var BankingViewModel = function () {
    //data
    var self = this;
    self.safeFloatTotal = ko.observable(null);
    self.floatRecommendedValue = ko.observable(null);
    self.safeFloatDenominations = ko.observableArray();
        //populate the array 
        var safeFloatCash = bankingApi.client.getSafeFloatCash();
        safeFloatCash.done(function (d) {
            self.safeFloatDenominations(d);
        })

    self.GetNoteByDenomination = ko.computed( function () {
      //  return 1234; //will bind OK
        return self.safeFloatDenominations[1]; //length of the array is zero when this is called, so element is undefined
    });
}
$(document).ready(function () {
    var viewModel = new BankingViewModel();        
        ko.applyBindings(viewModel);        
});
})();

并且在视图中

<div class="row">
                        <div class="col-xs-6">
                            <input type="text" data-bind="value: GetNoteByDenomination" />
                            <label>£50</label>
                        </div>
                        <div class="col-xs-6">
                            <input type="text" data-bind="value: safeFloatTotal" />
                            <label>50p</label>
                        </div>
                    </div>

我需要能够在数组初始化后调用它,这就是我目前所处的位置

如果你想访问可观察数组的第二个元素,你必须执行可观察的函数来获得底层数组:

self.GetNoteByDenomination = ko.computed(function () {
    return self.safeFloatDenominations().length > 1 ?
           self.safeFloatDenominations()[1] : "";
});

无论数组中有多少项,执行self.safeFloatDenominations[1]都将返回undefined

var BankingViewModel = function(){
    var self = this;
    this.applyData = function(data){
        // map ur data response from api with the observablearray here
    };
}
$(document).ready(function(){
        var viewModel = new BankingViewModel();        
        ko.applyBindings(viewModel);   
        var safeFloatCash = bankingApi.client.getSafeFloatCash();
        safeFloatCash.done(function (d) {
             viewModel.applyData(d);
        })
});