Javascript 将敲除json转换为可观察

Javascript 将敲除json转换为可观察,javascript,json,knockout.js,Javascript,Json,Knockout.js,我正在努力返回JSON数据并将其转换为可观察数据。数据以JSON格式返回,但似乎没有分配给可观察对象。有人能帮忙吗?我猜问题在于ajax调用的成功部分: <script type="text/javascript"> function StandingsViewModel() { var self = this; self.standings = ko.observableArray(); self.DivisionName = ko.observabl

我正在努力返回JSON数据并将其转换为可观察数据。数据以JSON格式返回,但似乎没有分配给可观察对象。有人能帮忙吗?我猜问题在于ajax调用的成功部分:

<script type="text/javascript">

function StandingsViewModel() {
    var self = this;

    self.standings = ko.observableArray();

    self.DivisionName = ko.observable('');

    self.afceast = ko.computed(function () {

        return ko.utils.arrayFilter(self.standings(), function (i) {
            return "AFC East" == i.DivisionName;
        });
    });

    self.afccentral = ko.computed(function () {

        return ko.utils.arrayFilter(self.standings(), function (i) {
            return "AFC Central" == i.DivisionName;
        });
    });

    self.afcwest = ko.computed(function () {

        return ko.utils.arrayFilter(self.standings(), function (i) {
            return "AFC West" == i.DivisionName;
        });
    });

    self.nfceast = ko.computed(function () {

        return ko.utils.arrayFilter(self.standings(), function (i) {
            return "NFC East" == i.DivisionName;
        });
    });

    self.nfccentral = ko.computed(function () {

        return ko.utils.arrayFilter(self.standings(), function (i) {
            return "NFC Central" == i.DivisionName;
        });
    });

    self.nfcwest = ko.computed(function () {

        return ko.utils.arrayFilter(self.standings(), function (i) {
            return "NFC West" == i.DivisionName;
        });
    });

    $.ajax({
        dataType: "json",
        url: "/api/standing/GetStandingsBySeason/2018",
        beforeSend: function (xhr) {
            $('#divStandings').html('');
            $('#divStandings').addClass('ajaxRefreshing');
            xhr.setRequestHeader('X-Client', 'jQuery');
        },
        success: function (result) {
            $('#divStandings').removeClass('ajaxRefreshing');
            self.standings(JSON.parse(result));
        }
    });
}

$(document).ready(function () {
    ko.applyBindings(new StandingsViewModel());
});

</script>

函数standingViewModel(){
var self=这个;
self.standings=ko.observativearray();
self.DivisionName=ko.可观察(“”);
self.afceast=ko.computed(函数(){
return ko.utils.arrayFilter(self.standings(),函数(i){
返回“AFC East”==i.分区名称;
});
});
self.afccentral=ko.computed(函数(){
return ko.utils.arrayFilter(self.standings(),函数(i){
返回“AFC Central”==i.分区名称;
});
});
self.afcwest=ko.computed(函数(){
return ko.utils.arrayFilter(self.standings(),函数(i){
返回“AFC West”==i.分区名称;
});
});
self.nfceast=ko.computed(函数(){
return ko.utils.arrayFilter(self.standings(),函数(i){
返回“NFC East”==i.分区名称;
});
});
self.nfccentral=ko.computed(函数(){
return ko.utils.arrayFilter(self.standings(),函数(i){
返回“NFC Central”==i.name;
});
});
self.nfcwest=ko.computed(函数(){
return ko.utils.arrayFilter(self.standings(),函数(i){
返回“NFC West”==i.分区名称;
});
});
$.ajax({
数据类型:“json”,
url:“/api/standing/GetStandingsBySeason/2018”,
发送前:函数(xhr){
$('#divStandings').html('');
$(“#divStandings”).addClass('ajaxRefreshing');
setRequestHeader('X-Client','jQuery');
},
成功:功能(结果){
$(“#divStandings”).removeClass('ajaxRefreshing');
self.standings(JSON.parse(result));
}
});
}
$(文档).ready(函数(){
应用绑定(新的standingViewModel());
});
您应该使用插件并将结果映射到可观察的对象

var observableData = ko.mapping.fromJS(result);
或者如果jQuery没有自动解析对象

var observableData = ko.mapping.fromJSON(result);
若你们的数据类型是数组,那个么它将被转换成observableArray,所以要把它作为普通数组来获取,你们应该通过添加括号从任何其他的可观测数据中获取

var array = observableData();
可以通过以下方式将该数组分配给obsevablerray:

self.standings(array);

使用映射插件进行敲除的另一种选择是使用。它是击倒赛和淘汰赛之间的桥梁

您可以轻松获得以下数据:

//Model
var StandingsModel = Backbone.Collection.extend({ 
    url:'/api/standing/GetStandingsBySeason/2018' 
});

//View model
var StandingsViewModel = function (standings) {
    this.standings = kb.collectionObservable(standings)
    //...
};

$(document).ready(function () {
    //Get data from server
    var model = new StandingsModel();
    model.fetch( function() {
        success: //...
    });

    //Apply bindings
    ko.applyBindings(new StandingsViewModel(model));
});

如果此操作不起作用,alert(observeResult)会给出以下命令:函数c(){if(0)
observeResult()
的结果是什么?您确定没有解析
result
吗?alert(observeResult())会给出null上述3个选项中没有一个选项填充self.standingsNote:for ko.toJS(数组)要在没有本机JSON序列化程序(例如IE7或更早版本)的旧浏览器上工作,还必须引用json2.js库。