【问题标题】:How to get back knockout observable binded by knockout-mapping如何通过淘汰赛映射取回淘汰赛可观察到的绑定
【发布时间】:2013-03-12 12:39:31
【问题描述】:

我已通过使用敲除映射插件将我的 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);
            };

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

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

如何提醒该值?

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

【问题讨论】:

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


    【解决方案1】:

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

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

    您可以在使用“create”自定义对象构造使用“update”自定义对象更新部分阅读更多内容here

    【讨论】:

    • 我根据您的建议更新了我的代码jsbin.com/ipeseq/9/edit。但现在我没有收到任何错误。但值不显示
    • 当我更新到 jsbin.com/ipeseq/9/edit 时,我收到错误错误:无法解析绑定。消息:ReferenceError:名称未定义;绑定值:值:名称
    • 您是否立即加载数据?如果你不这样做,你可以在你的学生对象中定义这些,即 self.Name = ko.observable();否则可能是服务器将您的数据小写并且您的属性被称为“名称”而不是“名称”
    猜你喜欢
    • 2014-03-26
    • 2014-03-20
    • 1970-01-01
    • 2012-10-22
    • 1970-01-01
    • 2014-11-05
    • 2012-09-08
    • 2012-07-07
    相关资源
    最近更新 更多