我有一个嵌套的json我最终分解为使用ko.mapping
:
{ users: [ { k: 'key',
name: 'Alice'
},
],
roles: [ { k: 'key',
name: 'Standard',
regex: [ ( 'root', 'me', 'myself'),
],
},
]
}
...等
我的情况是:
$.getJSON
或$.ajax
)不是从服务器加载的喷射; vm.users.name
,等待ajax请求成功? 我在看this question但是我可能会忽略这一点。
我的目标是定义UI ,而不用对初始viewModel进行建模,让它通过对服务器的Ajax调用来填充。需要所有嵌套项和数组才能成为可观察对象。
我在迭代后的最后一段代码:
function ViewModel( ) {
var self = this;
self.users = ko.observableArray();
self.roles = ko.observableArray();
// etc. logic
};
var viewModel = new ViewModel();
ko.applyBindings( viewModel );
$.getJSON('/api/call/from/server', function( data ){
ko.mapping.fromJS( data.users, {}, viewModel.clienti );
ko.mapping.fromJS( data.roles, {}, viewModel.procedure );
});
和html:
<select name="users" data-bind="options: users,
optionsCaption: '',
optionsText: name,
optionsValue: k">
带标题的服务器端谷歌应用引擎:
self.response.headers['Content-Type'] = 'application/json; charset=utf-8'
self.response.out.write( json.dumps( object ) )
实际上,我不想使用async: false
。
我设法在js ko.mapping
的三次通话中打破data.responseJSON
次调用,例如将用户映射到vm.users,然后将角色映射到vm.roles等。