我有一个定义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毫秒调用一次。

控制台正在注销:

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


我很确定我不了解如何使用节气门功能。我还注意到我正在使用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);
    }
});


我收到另一个错误:

Uncaught ReferenceError: onDragEvent is not defined


以供参考;只需调用controller.onDragEvent();即可。

最佳答案

我只是意识到我从来没有看到堆栈的右侧。您使用的是旧版本的余烬,直到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吗?

可拖动的示例:

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);
    }
});

09-19 17:45