在Sproutcore中观察私有属性

时间:2011-06-16 21:04:51

标签: javascript sproutcore sproutcore-views

是否可以从中观察私有(下划线)属性 在对象本身内? 我需要知道_view_layer何时被设置,以便我可以申请 一些jQuery甚至处理程序。不幸的是init()和render()都是 真的很早,所以_view_layer是未定义的。 不幸的是,观察_view_layer似乎也不行。 请告诉我我能做些什么。基本上,如果有另一种可能 解决方案,我很乐意看到它

2 个答案:

答案 0 :(得分:2)

在Sproutcore中,下划线只是约定,属性/方法是私有的。它实际上并不是私人的。

在Sproutcore中,视图具有生命周期方法。这可能是有意义的(取自SC 1.4.5代码):

  
      
  • didCreateLayer: render()方法用于生成新的HTML。
      重写此方法以在DOM上执行任何其他设置   威力   创建视图后需要做的事情。例如,如果您需要   听   对于活动。
  •   

SC 1.6及更高版本的观点发生了巨大变化,但我相信didCreateLayer仍然被认可。

答案 1 :(得分:0)

(function() {
  var value = obj._view_layer;
  delete obj._view_layer;
  var callback = function() {
    /* observation logic */
  }
  Object.defineProperty(obj, "_view_layer", {
    get: function() {
      return value;
    },
    set: function(val) {
      value = val;
      callback(val);
    },
    writable: true, 
    enumerable: true

  });
})();

需要ES5浏览器。

仅建议用于调试。在firefox中调试时也可以使用.watch