如何通过击倒映射获得淘汰观察结果

时间:2013-03-22 15:26:01

标签: javascript jquery json knockout.js knockout-mapping-plugin

我已经使用knockout-mapping插件将我的json数组绑定到了淘汰赛

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

绑定
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);
            };

现在我想提醒英语的价值。

我在alert(this.English());内尝试了dataFunction.prototype,但它不起作用。

如何提醒该值?

JS-Bin代码:http://jsbin.com/ipeseq/4/edit

1 个答案:

答案 0 :(得分:1)

您需要定义正确的视图模型,并在标记中使用该模型。

我将一个视图模型与自定义视图模型映射放在一起,我将数据映射到我可以在标记中使用的名为“Student”的对象。这个对象用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

您可以在使用“创建”自定义对象构建使用“更新”自定义对象 <{3}}

中阅读更多内容