javascript - Knockout.Mapping 和 EcmaScript 5 已设置

标签 javascript knockout.js knockout-mapping-plugin ecmascript-5

ko.mapping可以变换get, set property's (ES5)在单个 ko.compated 中?

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 支持这个或者如何做到这一点?

最佳答案

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

我创建了a gist, including tests,创建具有可观察属性的模型,以及一些创建它们的实用函数。核心代码在这里:

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];
      }
    }
  }
};

关于javascript - Knockout.Mapping 和 EcmaScript 5 已设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13845573/

相关文章:

javascript - knockout : ko observable without a default value

javascript - 推迟或暂停评估 knockout 中的依赖关系,直到 View 模型完全更新(例如使用映射插件)

JavaScript 函数声明样式

javascript - jquery克隆拖拽

javascript - KNockoutJS - Bootstrap 模式未正确加载

jquery - 将模板项绑定(bind)到 KnockoutJS 中数组的索引

javascript - KnockoutJS 未拾取 jQuery .change() 事件

json - 使用 knockout.mapping 时,knockoutjs 抛出 "Unknown template value"

javascript - chrome 扩展后台、js 到 content.js 之间的消息传递

javascript - 如何在 node.js 中的文件的每一行末尾添加文本?