我已经使用 knockout-mapping 插件将我的 json 数组绑定(bind)到 knockout
JSON
{
"info":[
{
"Name":"Noob Here",
"Major":"Language",
"Sex":"Male",
"English":"15",
"Japanese":"5",
"Calculus":"0",
"Geometry":"20"
},
{
"Name":"Noob Here",
"Major":"Calculus",
"Sex":"Female",
"English":"0.5",
"Japanese":"40",
"Calculus":"20",
"Geometry":"05"
}
]
}
使用 knockout-mapping plugin 绑定(bind)
var data = [];
$.each(data1.info, function (index, element) {
data.push({
English: element.English,
Japanese: element.Japanese,
Calculus: element.Calculus,
Geometry: element.Geometry,
name: element.Name,
major: element.Major,
sex: element.Sex
});
});
dataFunction.prototype = function () {
var getAllItems = function () {
var self = this;
ko.mapping.fromJS(data, {}, self.Items);
};
现在我想提醒一下英语的值(value)。
我在 dataFunction.prototype
中尝试了 alert(this.English());
但它不起作用。
如何提醒该值?
JS-Bin码:http://jsbin.com/ipeseq/4/edit
最佳答案
您需要定义一个合适的 View 模型并在您的标记中使用它。
我将 View 模型与自定义 View 模型映射放在一起,我将您的数据映射到我称为“学生”的对象中,您可以在标记中使用这些对象。这个对象我扩展了一个 ko.computed 来计算总数(在这个对象中你可以读取和操作你的 observables)。
var Student = function(data) {
var self = this;
ko.mapping.fromJS(data, { }, self);
self.total = ko.computed(function() { // Calculate total here
return self.English() + self.Japanese() + self.Calculus() + self.Geometry();
});
};
var viewModelMapping = { // Map all objects in 'info' to Student objects
'info': {
create: function(options) {
return new Student(options.data);
}
}
};
var ViewModel = function(data) { // Create a view model using the mapping
var self = this;
ko.mapping.fromJS(data,viewModelMapping,self);
}
$(document).ready(function () {
vm = new ViewModel(data);
ko.applyBindings(vm);
});
可以看到生成的JSBin代码here
您可以在使用“创建”自定义对象构造和使用“更新”自定义对象更新部分阅读更多信息 here
关于javascript - 如何取回由 knockout 映射绑定(bind)的 knockout 可观察对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15574032/