我是Knockout的新手,问题是我尝试从JSON加载对象并使用计算值 请参阅jsfiddle示例并告诉我我做错了什么 它应该显示" Hello World" +"开始日期" (在第三行) http://jsfiddle.net/qp86wbdt/3/
self.starttextt= ko.computed(function() {
return " Hello world " + this.start();
}, this);
值得一提的是,这个计算对象存在于"事件" "事件"对象(从json加载)对象存在于ViewModel对象中。
感谢您的帮助,谢谢
答案 0 :(得分:0)
您当前的方法存在一些问题:
您需要修复Event
函数以获取一些参数来填充数据:
function Event(data) {
var self = this;
self.title = ko.observable(data.title);
self.start = ko.observable(data.start);
self.starttextt = ko.computed(function () {
return " Hello world " + this.start();
}, this);
}
然后编写var data = [Event];
只是创建一个带有Event
函数的数组,它不会进行任何类型的映射。您需要在map
阵列上致电objs
:
var objs = JSON.parse(js);
var data = objs.map(function (e) {
return new Event(e)
});
您需要在viewModel中使用data
而不是obj
var viewModel = function () {
var self = this;
self.events = ko.observableArray(data);
};
演示JSFiddle。
但是,您不需要编写所有这些映射代码,因为已经存在一个名为Mapping plugin的插件,用于处理这些情况。
以下是使用映射插件重写的示例:
var mapping = {
create: function (options) {
var event = ko.mapping.fromJS(options.data);
event.starttextt = ko.computed(function () {
return " Hello world " + event.start();
}, event);
return event;
}
}
var viewModel = function () {
var self = this;
self.events = ko.mapping.fromJSON(js, mapping);
};
演示JSFiddle。