(Ember.run.throttle)对象函数在Ember.Mixin中没有方法'throttle' [英] (Ember.run.throttle) Object Function has no method 'throttle' in Ember.Mixin

查看:268
本文介绍了(Ember.run.throttle)对象函数在Ember.Mixin中没有方法'throttle'的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个控制器定义onDragEvent:

  controller = Em.Object.create({
onDragEvent: function(){
console.log(Drag Event);
}
});

我有一个Mixin:

  Event = Ember.Mixin.create({
attributeBindings:'draggable',
draggable:'true',
drag:function(event){
Em.run.throttle(this,controller.onDragEvent,1000);
}
});

我的理解是,在拖动期间,controller.onDragEvent应该每1000毫秒调用一次。 p>

控制台正在注销:

 未捕获TypeError:Object function ,b){var d,e; f.begin(); try {if(a || b)d = c(a,b,arguments,2)} finally {f.end()} return d}方法'throttle'Events.js:42 
Events.Ember.Mixin.create.drag Events.js:42
Ember.View.Ember.Object.extend.trigger ember-1.0.pre.min。 js:16
d ember-1.0.pre.min.js:14
Ember.View.states.hasElement.handleEvent ember-1.0.pre.min.js:16
Ember.View。 Ember.Object.extend.invokeForState ember-1.0.pre.min.js:16
Ember.View.Ember.Object.extend.handleEvent ember-1.0.pre.min.js:16
(匿名函数)ember-1.0.pre.min.js:16
c ember-1.0.pre.min.js:14
Ember.run ember-1.0.pre.min.js:14
ember.EventDispatcher.Ember.Object.extend._bubbleEvent ember-1.0.pre.min.js:16
(匿名函数)ember-1.0.pre.min.js:1 6
f.event.dispatch jquery-1.7.2.min.js:3
h.handle.i

我很确定我不明白如何使用油门功能。我也注意到我正在使用 Em.Object.create vs. Ember.Mixin.create ,但调用 controller.onDragEvent 没有油门工作正常。我做错了什么?



编辑1:



如果我使用:

  Event = Ember.Mixin.create({
attributeBindings:'draggable',
draggable:'true',
drag:function(event){
Em.run.throttle(controller,onDragEvent,1000);
}
});

我收到一个不同的错误:

 未捕获ReferenceError:onDragEvent未定义

只需调用 controller.onDragEvent(); 正常工作。

解决方案

刚刚意识到我从来没有看到堆栈的右侧。你是一个旧版本的ember,节气门和去抖功能直到迟到1.0 beta(1.0 RC7是准确的,这是1.0之前的方式)才引入。



切换到此版本:



// cdnjs.cloudflare.com/ajax/libs/ember.js/1.0.0/ember.js



似乎对我有用:



http://emberjs.jsbin.com/oZIMiMA/1/edit



突出显示a或b输出。



你可以设置一个显示不起作用的jsbin吗?



可拖动的示例: p>

http://jsfiddle.net/tjZac/1/

  DragNDrop.Draggable = Ember.Mixin.create({
attributeBindings:'draggable',
draggable:'true',
drag:function(event){
console.log('real call')
Ember.run.throttle(this,DragNDrop.c ontroller.onDragEvent,300);
}
});


I have a controller that defines onDragEvent:

controller = Em.Object.create( {
    onDragEvent: function() {
        console.log("Drag Event");
    }
});

And I have a Mixin:

Event = Ember.Mixin.create( {
    attributeBindings: 'draggable',
    draggable: 'true',
    drag: function (event) {
        Em.run.throttle(this, controller.onDragEvent, 1000);
    }
});

My understanding is that during the drag the controller.onDragEvent should be called once every 1000 milliseconds.

The console is logging out:

Uncaught TypeError: Object function (a,b){var d,e;f.begin();try{if(a||b)d=c(a,b,arguments,2)}finally{f.end()}return d} has no method 'throttle' Events.js:42
Events.Ember.Mixin.create.drag Events.js:42
Ember.View.Ember.Object.extend.trigger ember-1.0.pre.min.js:16
d ember-1.0.pre.min.js:14
Ember.View.states.hasElement.handleEvent ember-1.0.pre.min.js:16
Ember.View.Ember.Object.extend.invokeForState ember-1.0.pre.min.js:16
Ember.View.Ember.Object.extend.handleEvent ember-1.0.pre.min.js:16
(anonymous function) ember-1.0.pre.min.js:16
c ember-1.0.pre.min.js:14
Ember.run ember-1.0.pre.min.js:14
Ember.EventDispatcher.Ember.Object.extend._bubbleEvent ember-1.0.pre.min.js:16
(anonymous function) ember-1.0.pre.min.js:16
f.event.dispatch jquery-1.7.2.min.js:3
h.handle.i

I'm pretty sure I don't understand how to use the throttle feature. I also notice that I am using Em.Object.create vs. Ember.Mixin.create, but calling the controller.onDragEvent without the throttle works fine. What am I doing incorrectly?

edit 1:

if I use:

Event = Ember.Mixin.create( {
    attributeBindings: 'draggable',
    draggable: 'true',
    drag: function (event) {
        Em.run.throttle(controller, onDragEvent, 1000);
    }
});

I get a different error:

Uncaught ReferenceError: onDragEvent is not defined

For reference; just calling controller.onDragEvent(); works fine.

解决方案

I just realized I never saw the right side of the stack. You are on an older version of ember, the throttle and debounce features weren't introduced until late in 1.0 beta (1.0 RC7 to be exact, which is way after 1.0 pre)

Switch to this version:

//cdnjs.cloudflare.com/ajax/libs/ember.js/1.0.0/ember.js

It appears to be working for me:

http://emberjs.jsbin.com/oZIMiMA/1/edit

Highlight over a or b on the output.

Could you set up a jsbin showing it not working?

Example with draggable:

http://jsfiddle.net/tjZac/1/

DragNDrop.Draggable = Ember.Mixin.create({
  attributeBindings: 'draggable',
  draggable: 'true',
    drag: function(event) {
        console.log('real call')
         Ember.run.throttle(this, DragNDrop.controller.onDragEvent, 300);
    }
});

这篇关于(Ember.run.throttle)对象函数在Ember.Mixin中没有方法'throttle'的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆