Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/373.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 映射和EcmaScript 5获取集_Javascript_Knockout.js_Knockout Mapping Plugin_Ecmascript 5 - Fatal编程技术网

Javascript 映射和EcmaScript 5获取集

Javascript 映射和EcmaScript 5获取集,javascript,knockout.js,knockout-mapping-plugin,ecmascript-5,Javascript,Knockout.js,Knockout Mapping Plugin,Ecmascript 5,映射可以在单个ko.computed中转换吗 var people = { get Name (){ return this._name; }, set Name(value){ this._name = value; } }; var vm = ko.mapping(people, {/* mapping getset to computed */}); vm.Name instanceOf ko.computed ===

映射可以在单个ko.computed中转换吗

var people = { 
    get Name (){ 
        return this._name;
    },
    set Name(value){
        this._name = value;
    } 
};
var vm = ko.mapping(people, {/* mapping getset to computed */});
vm.Name instanceOf ko.computed === true.

ko.mapping支持这一点或如何支持这一点

我确信您的意思是使用可观察的,而不是计算的,因为这不依赖于其他可观察的

我创建了一系列创建具有可观察属性的模型的方法,以及一些用于创建这些模型的实用函数。核心代码如下:

var defineProperty = function(type, obj, prop, def) {
  if (obj == null || typeof obj != 'object' || typeof prop != 'string') {
    throw new Error('invalid arguments passed');
  }

  if (Object.prototype.toString.call(def) === '[object Array]' && type === 'observable') {
    type = 'observableArray';
  }

  var obv = ko[type](def);
  Object.defineProperty(obj, prop, {
    set: function(value) { obv(value) },
    get: function() { return obv() },
    enumerable: true,
    configurable: true
  });

  Object.defineProperty(obj, '_' + prop, {
    get: function() { return obv },
    enumerable: false
  });
};

ko.utils.defineObservableProperty = defineProperty.bind(null, 'observable');
ko.utils.defineComputedProperty = defineProperty.bind(null, 'computed');

ko.observableModel = function(defaults) {
  for (var prop in defaults) {
    if (defaults.hasOwnProperty(prop)) {
      if (defaults[prop] != null && typeof defaults[prop] == 'object' && Object.prototype.toString.call(defaults[prop]) !== '[object Array]') {
        // should this also be an observable property?
        this[prop] = new ko.observableModel(defaults[prop]);
      } else if (!defaults[prop] || !ko.isSubscribable(defaults[prop])) {
        ko.utils.defineObservableProperty(this, prop, defaults[prop]);
      } else {
        this[prop] = defaults[prop];
      }
    }
  }
};

非常好的例子!不完全是我的想法,但它帮助了很多。我的目标是真正连接以获取/设置视图,我在github上做了一个项目以继续,或者在增量中做了一些事情。映射:谢谢。仅供参考。。。因为可观察对象是一个函数,所以不需要在其周围设置包装器。。。您可以直接链接到它(即get:obs,set:obs),这意味着您可以在不需要括号的情况下设置/读取您的可观察值。。。