如何通过ajax调用在敲除js中填充数据
How to populate data in knockout js through ajax call
我有一个json对象,我正在从servlet向敲除js进行响应。我想在我写这段代码的视图模型中初始化这些数据。
success: function (data)
{
var jsondata = data['jsonObj'];
self.PopulateStates = ko.computed(function(){
ko.utils.arrayForEach(jsondata, function(item){
self.States.push(new State(item));
});
});
},
error: function (exception)
{
alert( "fail" );
}
});
作为字符串的json对象看起来像这个
{data:[{"id":"5345345","name":"dsfsdf","ssc":"","bic":"dgffdgfdg"},{"id":"123456","name":"SBI","ssc":"654321","bic":"vxvxc"}]}
js fiddle链接演示我犯了什么错?或者我需要通过映射敲除js的插件来完成它吗?
我使用这个淘汰扩展,在使用之前声明。
ko.observableArray.fn.map = function (data, Constructor) {
var mappedData = ko.utils.forEach(data, function () {
return new Constructor(data);
});
this(mappedData);
return this;
}
然后在我的$.ajax
请求中,我这样做:
success: function (data)
{
var jsondata = data['jsonObj'];
self.PopulateStates = ko.observableArray().map(data, State);
});
你在computed
中得到了结果,这不是你所需要的。
我注意到的另一件事是,您的jsondata
是使用从GET返回的数据设置的。然而,您正在询问字段jsonObj
的数据,看看您的JSON,似乎没有这个字段。我认为我说的是正确的,你有data
作为返回项目列表的字段。
如果在您的视图模型中已经声明了self.PopulateStates
,我猜您已经声明了。你可以这样做:
var State = function (data) {
var self = this;
self.property = ko.observable().set(data, "property");
}
var viewModel = function () {
var self = this;
self.PopulateStates = ko.observable();
function getStates() {
var request = $.ajax();
request.done(function (data, msg) {
if (data) self.PopulateStates.map(data, State);
});
}
}
如果你注意到在State
模型中,我有一个self.property
,它使用了一个自定义的observable
函数来设置它。所有这些都是如果有数据要设置属性,就设置它。否则给它一个默认值。我还有第三个参数,当我希望它使用数据为我构建对象时,我会使用它。这就是我说的,一个联系人,具有modifiedBy
属性,而这个modifiedBy
是一个用户对象(或者只是一个复杂对象)
编辑
最重要的是包含jQuery
,这不是一个错误,但不是必需的。Knockout是为独立于jQuery
工作而构建的,因此在执行$(document).ready(function () {})
以确保在DOM上加载时不需要准备就绪。这意味着如果页面不需要jQuery
,就不必包含它。
这是最新的小提琴,现在可以工作了!
相关文章:
- 使用kendo js填充网格
- 设置图像以使用纸张.js填充画布
- 需要.js填充程序,用于加载 JQuery UI 和其他 JQuery 包
- 使用 JS 填充 HTML 表,数据顺序错误
- 使用图表绘制图表.js填充每个 JsonRPC 获取的数据
- 如何正确配置需要 JS 填充程序
- 用js填充来自另一个域的iframe字段
- 只包含回调的脚本需要JS填充程序
- 获取矩形,用Raphael和Handdrawn.js填充svg
- Sails.js填充过滤器
- Phantom.js填充字段,点击提交,现在只能访问下一页
- 在动态js填充元素(形状)与图像
- 在django模板中使用knockout.js填充表格
- 图表js -填充甜甜圈
- 创建一个可编辑的下拉菜单,并从外部JS填充它
- Enyo js -填充菜单
- ie9不显示由js填充的表
- js:填充我的集合,然后将其追加到页面
- JS -填充画布的背景颜色
- ngRoute和Undercore.js需要js填充程序配置