【问题标题】:Render Json from ViewModel and viceversa从 ViewModel 渲染 Json,反之亦然
【发布时间】:2012-11-07 19:10:53
【问题描述】:

我是淘汰 js 的新手,我有一个类似于这个 jsfiddle http://jsfiddle.net/daedalus28/vpjhZ/ 的要求,从 viewmodel 渲染 json 很棒,但我无法做到反之亦然,因为来自服务器的 json 需要渲染相同看法。如何在映射创建函数中映射 observablearray?

var FilterGroup = function(parent) {

    this.join = ko.observable('All');
    this.filters = ko.observableArray([new Filter(this)]);

    this.addFilter = function() {
        var filter = new Filter(this);
        this.filters.push(filter);
        this.filters.valueHasMutated();
    };
    this.addGroup = function() {
        var group = new FilterGroup(this);
        this.filters.push(group);
        this.filters.valueHasMutated();
    };
    this.remove = (function(parent) {
        return function() {
            parent.filters.remove(this);
        }
    })(parent);

     this.isRoot = (function(parent) { 
        return function() {
            return parent ? false : true;
        }
    })(parent);


    var mappingOptions = {
        filters: {
            create: function(args) {
                   return new function () {

                   filters = ko.observableArray([new Filter(args.data)]);

      };

            }
        }
    };

    ko.mapping.fromJS(parent, mappingOptions, this);


};

var data = {filters:{join:'All',filters:[{field:{name:'IsDeleted',label:'Deleted'},modifier:'contains',criteria:'50'},{join:'All',filters:[{field:{name:'IsDeleted',label:'Deleted'},modifier:'equals',criteria:'20'}]},{field:{name:'Email',label:'Email'},modifier:'equals',criteria:'30'}]}};

var viewModel = {
    filters: new FilterGroup(data.filters),
    options:  {
        joins: ['All', 'Any'],
        modifiers: [
            'equals',
            'not equal to',
            'less than',
            'greater than',
            'contains',
            'does not contain',
            'starts with'
        ],
        fields: [{"name":"Id","label":"ContactID"},{"name":"IsDeleted","label":"Deleted"}],
    },

    toJSON: function() {
        return {
             filters: this.filters
        }
    }
  };


$(function() {


    ko.applyBindings(viewModel);
})

;

【问题讨论】:

    标签: knockout.js knockout-mapping-plugin


    【解决方案1】:

    我不确定我是否理解正确,但您想从您的 ViewModel 呈现 JSON 字符串? 如果是这样,您将不得不这样做:

    var result = JSON.stringify(unwrapObservable(myViewModel));
    

    或使用mapping plugin

    【讨论】:

      猜你喜欢
      • 2020-10-18
      • 1970-01-01
      • 1970-01-01
      • 2023-03-29
      • 2014-11-18
      • 1970-01-01
      • 1970-01-01
      • 2014-10-14
      • 2015-01-12
      相关资源
      最近更新 更多