在Typescript中运行BackboneJs事件

永远好奇

我正在用Typescript编写Backbone程序,但无法初始化任何事件。这是我为解决问题而创建的测试类。start()单击div时未调用该函数

class TestView extends Backbone.View{

    events = {
        "click #testDiv" : "start"
    }

    start(){
        console.log("Clicked");
    }

    constructor(options?){
        super(options);
    }

    render(){
        $root.html(getNewDiv("testDiv"));
        $("#testDiv").css("height", 100).css("width", 100).css("background-color", "green");
        console.log("Rendered");
        return this;
    }
}

function getNewDiv(id:string) {
    return "<div id = \"" + id + "\"></div>"
}

new TestView().render();

这是控制台输出:

Rendered

这是我正在使用的主干打字稿定义:

https://github.com/borisyankov/DefinitelyTyped/blob/master/backbone/backbone.d.ts


这是骨架JS的CDN位置

缩小版:http ://cdnjs.cloudflare.com/ajax/libs/backbone.js/1.1.0/backbone-min.js

非最小化:http ://cdnjs.cloudflare.com/ajax/libs/backbone.js/1.1.0/backbone.js

我担心我的语法是否正确,或者与Backbone的Typescript定义有关。

更新

凯文·皮尔(Kevin Peel)在下面显示的答案抛出错误,因为在Typescript定义文件中,“事件”被定义为一个函数(例如events())。如果仅创建“事件”函数,则会收到错误-“未捕获的TypeError:对象[object Object]没有方法'off'”。如果我使用getter方法(例如,get events(){}),则在实际触发事件时并没有真正发生任何事情。

Using delegate Events

我试图delegateEvents()在Backbone.View中使用该函数,这会产生错误:

constructor(options:any, question:Question, div:JQuery) {
        this.delegateEvents({
           "click" : "clicked"
        });
    }

错误:

Uncaught TypeError: Object [object Object] has no method 'off' backbone.js:1082
h.extend.undelegateEvents backbone.js:1082
h.extend.delegateEvents backbone.js:1059
凯文·皮尔

问题在于TypeScript定义事件的位置。当您定义这样的事件时:

class TestView extends Backbone.View {
    events = {
        "click #testDiv": "start"
    }
    // ...
}

TypeScript的作用是初始化实例后将events作为属性附加因此,当Backbone初始化视图时,尚未附加视图,因此Backbone无法绑定它们。events

不幸的是,似乎没有一种好的方法可以让TypeScript分配events给原型,因此您需要以某种方式来解决它。

绝对最简单的方法是自己在原型上设置事件:

class TestView extends Backbone.View {
    // Get rid of the events declaration in here
    // ...
}

TestView.prototype.events = {
    "click #testDiv": "start"
}

解决此问题的第二种可能方法是使用此StackOverflow答案中getter建议的TypeScript功能

最后,第三种方法是每次渲染时都绑定事件。这是解决TypeScript问题的另一种简便方法,但是如果多次渲染视图,它可能不是最佳解决方案。

class TestView extends Backbone.View{
    events = {
        "click #testDiv" : "start"
    }

    // ...

    render(){
        $root.html(getNewDiv("testDiv"));
        // Here is where you'll bind the events using Backbone's delegateEvents
        this.delegateEvents();
        $("#testDiv").css("height", 100).css("width", 100).css("background-color", "green");
        console.log("Rendered");
        return this;
    }
}

// ...

new TestView().render();

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在Typescript中运行BackboneJs事件

来自分类Dev

BackboneJS click事件未触发

来自分类Dev

如何在BackboneJs中发生单击事件

来自分类Dev

React中TypeScript中事件的类型

来自分类Dev

所有收集项目的Backbonejs事件或每个ItemView的事件

来自分类Dev

运行时创建的控件中的事件

来自分类Dev

在事件函数中引用“this”,同时仍然能够删除事件 TypeScript

来自分类Dev

在扩展EventEmitter的TypeScript类中声明事件

来自分类Dev

使用TypeScript进行React中的onKeyDown事件

来自分类Dev

从Highcharts加载事件中调用Typescript函数

来自分类Dev

React Native中onLayout事件的TypeScript类型?

来自分类Dev

粘贴事件中的Typescript回调为null

来自分类Dev

我可以在 Typescript 中定义事件吗?

来自分类Dev

BackboneJS:如何从视图的事件哈希调用视图外部的函数?

来自分类Dev

不使用jQuery在Backbonejs中刷卡

来自分类Dev

不使用jQuery在Backbonejs中刷卡

来自分类Dev

where过滤键中的Backbonejs变量

来自分类Dev

BackboneJs无法在渲染的模板中渲染模板

来自分类Dev

在TypeScript(TS节点)中运行glob命令

来自分类Dev

使用Chutzpah在Typescript中运行Jasmine测试

来自分类Dev

CGContextClearRect在touchesMove事件中无法在目标C中顺利运行

来自分类Dev

CGContextClearRect在touchesMove事件中无法在目标C中顺利运行

来自分类Dev

如何在onblur事件中获取$ scope或$ element并在onblur事件中运行函数?

来自分类Dev

在VB.NET Windows窗体中重新运行事件

来自分类Dev

事件未触发angularjs指令中的运行时控件

来自分类Dev

生成后事件始终在MSBUILD VS2013中运行

来自分类Dev

阻止正在运行的事件在javascript / jQuery中执行

来自分类Dev

Blazor组件中运行的后台线程和事件处理程序

来自分类Dev

在WPF中关闭事件后保持应用程序运行

Related 相关文章

  1. 1

    在Typescript中运行BackboneJs事件

  2. 2

    BackboneJS click事件未触发

  3. 3

    如何在BackboneJs中发生单击事件

  4. 4

    React中TypeScript中事件的类型

  5. 5

    所有收集项目的Backbonejs事件或每个ItemView的事件

  6. 6

    运行时创建的控件中的事件

  7. 7

    在事件函数中引用“this”,同时仍然能够删除事件 TypeScript

  8. 8

    在扩展EventEmitter的TypeScript类中声明事件

  9. 9

    使用TypeScript进行React中的onKeyDown事件

  10. 10

    从Highcharts加载事件中调用Typescript函数

  11. 11

    React Native中onLayout事件的TypeScript类型?

  12. 12

    粘贴事件中的Typescript回调为null

  13. 13

    我可以在 Typescript 中定义事件吗?

  14. 14

    BackboneJS:如何从视图的事件哈希调用视图外部的函数?

  15. 15

    不使用jQuery在Backbonejs中刷卡

  16. 16

    不使用jQuery在Backbonejs中刷卡

  17. 17

    where过滤键中的Backbonejs变量

  18. 18

    BackboneJs无法在渲染的模板中渲染模板

  19. 19

    在TypeScript(TS节点)中运行glob命令

  20. 20

    使用Chutzpah在Typescript中运行Jasmine测试

  21. 21

    CGContextClearRect在touchesMove事件中无法在目标C中顺利运行

  22. 22

    CGContextClearRect在touchesMove事件中无法在目标C中顺利运行

  23. 23

    如何在onblur事件中获取$ scope或$ element并在onblur事件中运行函数?

  24. 24

    在VB.NET Windows窗体中重新运行事件

  25. 25

    事件未触发angularjs指令中的运行时控件

  26. 26

    生成后事件始终在MSBUILD VS2013中运行

  27. 27

    阻止正在运行的事件在javascript / jQuery中执行

  28. 28

    Blazor组件中运行的后台线程和事件处理程序

  29. 29

    在WPF中关闭事件后保持应用程序运行

热门标签

归档