javascript - 如何取回由 knockout 映射绑定(bind)的 knockout 可观察对象

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

我已经使用 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/

相关文章:

javascript - 将角色列表传递给子组件

javascript - 模式隐藏时滚动条未恢复

javascript - 使用 jquery 水平背景 css 位置

javascript - 如何关闭richmarker infoview?

jquery - 如何迭代由 json 对象中的键访问的数组

sql - 在 postgres 中更新 jsonb 对象

javascript - 根据id标识符访问HTML元素

javascript - 如何在 Blockly 自定义 block 的 `onchange` 事件中获取值?

php - 将压缩后的数据编码为json字符串

javascript - 在点击事件上重置 jQuery Raty 选择 (jQuery)