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