我正在尝试对_.debounce canjs视图模型方法使用lodash 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

09-25 15:46