如何在 CanJS DefineMap 视图模型方法中使用去抖功能?

How to use debounce function with CanJS DefineMap view-model method?

我正在尝试将 lodash _.debounce 函数用于 canjs DefineMap 视图模型方法,但即使我尝试这样做,this 似乎也很棘手在 init 方法中但没有成功:

export const ViewModel = DefineMap.extend({
 init() {
  this.myMethod = _.debounce(this.myMethod, 200)
 },
 myMethod() {
  // cool stuff here
 }
})

感谢任何帮助!

因为默认情况下 DefineMap 是密封的,并且您可能希望针对 ViewModel 的各个实例进行独立节流,您希望这样做:

var time = new Date();

var ViewModel = can.DefineMap.extend({
 id: "number",
 myMethod: {
   type: "any",
   default(){

     var fn = _.debounce(function(){
       console.log(this.id+" says Hi at "+(new Date() - time))
     },100);
     return fn;
   }
 }
});

这基本上将 myMethod 属性 设置为去抖功能。你可以在这里看到它的实际效果:http://jsbin.com/nekelak/edit?html,js,console