(Ember.run.throttle)对象函数在Ember.Mixin中没有方法'throttle' [英] (Ember.run.throttle) Object Function has no method 'throttle' in Ember.Mixin
问题描述
我有一个控制器定义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>
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:
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屋!