我第一次学习Backbone.js而且我遇到了一个问题,试图从触发中获取自定义事件(或者从视图中识别出它被触发时)?

您可以在此处查看我的收集代码:https://github.com/Integralist/Backbone-Playground/blob/master/Assets/Scripts/App/main.js#L72-86,初始化时会触发自定义集合:init事件.

var Contacts = Backbone.Collection.extend({
    model: Contact,initialize: function(){
        this.trigger('collection:init');
        this.bind('add',this.model_added,this);
    },model_added: function(){
        console.log('A new model has been created so trigger an event for the View to update the <select> menu');
    }
});

但是后来在我的View中,我正在听那个事件,我无法将函数填充到:https://github.com/Integralist/Backbone-Playground/blob/master/Assets/Scripts/App/main.js#L90-107

var ContactsView = Backbone.View.extend({
    initialize: function(){
        console.log(contacts.models,'get initial model data and populate the select menu?');
    },events: {
        'collection:init': 'populate','change select': 'displaySelected'
    },populate: function(){
        console.log('populate the <select> with initial Model data');
    },displaySelected: function (event) {
        console.log('get model data and display selected user',event);
    }
});

我有什么想法我做错了吗?

解决方法

视图中的事件哈希用于将DOM中的事件绑定到您的视图,例如由渲染视图中的元素引发的事件.要收听您的收藏集引发的事件,您必须手动设置它们:
var ContactsView = Backbone.View.extend({
    initialize: function(){
        contacts.on("collection:init",this.populate,this);
    }
    ...
});

请注意,您正在使用全局联系人变量,我建议使用Backbone机制并将您的集合传递给构造函数,就像使用el:

var ContactsView = Backbone.View.extend({
    initialize: function(){
        console.log(this.collection.models);
        this.collection.on("collection:init",this);
    }
    ...
});

var contacts_view = new ContactsView({
    el: $('#view-contacts'),collection:contacts
});

正如@mu在评论中所说的那样,你的事件将不会做任何事情,因为你在集合的initialize方法中触发它,因此在你可以绑定视图中的任何东西之前,集合的构造函数会自动调用它.请参阅此小提琴以可视化呼叫顺序:http://jsfiddle.net/yRuCN/

在别处触发它,或者,如果我正确读出你的意图,你(可能)想要使用内置的重置事件:

var ContactsView = Backbone.View.extend({
    initialize: function(){
        this.collection.on("reset",this);
    }
    ...
});

有关潜在用途的示例,请参见http://jsfiddle.net/yRuCN/1/.

backbone.js – 无法识别骨干自定义事件触发器?的更多相关文章

  1. ios – Xcode Bot:如何在post触发器脚本上获得.ipa路径?

    我正在使用机器人来存档iOS应用程序,我需要获取.ipa产品路径才能将其发布到我们的分发系统中.机器人设置:并使用脚本打印所有env变量,其中不包含ipa文件的路径.此外,一些变量指向不存在的目录,即:XCS_OUTPUT_DIR这里的env变量输出:除此之外,我还能够确认.ipa文件是在另一个文件夹中创建的(/IntegrationAssets//

  2. android – 使用房间数据库(房间持久性库)创建触发器

    如何使用RoomPersistence库“创建触发器”解决方法在RoomDatabase上调用getopenHelper().这为您提供了一个SupportsqliteOpenHelper,它具有让人联想到sqliteOpenHelper的API.在那里,调用getWritableDatabase()以获取SupportsqliteDatabase,并在那里使用execsql()来执行您的sql语

  3. android – 使用SQLite触发器来更新“LastModified”字段

    即,触发器可以自动检测哪些表和行正被更新/插入/替换等.并通知设置该行的“last_modified”字段,或者我必须为每个表创建一个单独的触发器?或者如果触发器是一个坏主意,有没有更好的选择?谢谢.解决方法一个简短而甜美的答案给你:>之后,所以触发器有一个有效的表来引用.>您需要为您想要影响的每个表/列组合执行CREATETRIGGER.数据库不会假设,因为另一个表有一个last_modified列,你希望这个行为相同…

  4. xaml – 当我更改主题设置时,为什么我的AdaptiveTrigger会触发?

    不要自己刷新ThemeResources?他们为什么要依赖visualstatemanager?

  5. 任何人都可以推荐一个.Net开源替代Windows Workflow?

    .Net堆栈中的WindowsWorkflow有哪些替代方案?

  6. centos – Cobbler安装后的Kickoff Ansible Playbook

    你可以在/etc/rc.local中有一个包装脚本,它在系统第一次启动时运行Ansibleplaybook,然后自行删除吗?要么在脚本结尾处使用rm$0,要么在完成后编辑/etc/rc.local?

  7. 在Ubuntu 16.04 64bit上安装谷歌地球Google Earth免费版

    下面是我在64位Ubuntu16.04上安装谷歌地球免费版的实录,以作备忘。Google了一圈,发现真的没有。在Ubuntu16.0464bit上安装谷歌地球GoogleEarth免费版谷歌开源谷歌地球企业版源码http://www.linuxidc.com/Linux/2017-02/140588.htm直接进入谷歌地球官网https://www.google.com/intl/zh-CN/earth/在Ubuntu16.0464bit上安装谷歌地球GoogleEarth免费版进入下载地址,直接下载针对

  8. php – MySQL DDL触发器,用于列重命名的Diff表架构

    我正在创建一个PHP脚本来比较两个数据库的模式.我已经设法检查关于丢弃/添加的表,列,索引和引用的模式更改,但是当涉及重命名的列时,我有点卡住了.在以下示例中,源数据库包含最新的模式,目标数据库包含类似的模式,但可能已过期.先决条件:>我不知道自上次差异以来发生的变化.>数据库中的数据将不匹配,但模式应该在diff之后.以目标数据库中的以下模式为例.然后在源数据库中假设以下模式.没有明确地知道发生

  9. php – 如何根据MySQL的现有值获取下一个字母数字ID

    或者我会接受任何其他建议的解决此问题的方法.如果您使用的是MyISAM,则可以在文本字段自动增量字段上创建复合主键.MysqL将自动处理递增数字.它们是单独的字段,但您可以获得相同的效果.当您插入表中时,key_increment字段将基于key_prefix的最高值递增.所以插入key_prefix“smit”将以key_inrement中的1开头,key_prefix“jone”将以key_inrement中的1开头,等等.优点:>您无需为计算数字做任何事情.缺点:>您的密钥分为2列.>它不适用于In

  10. ubuntu16.04安装teamviewer12依赖包解决

    执行结果:[html]viewplaincopy下载sudoapt-getinstall-f正在读取软件包列表...完成正在分析软件包的依赖关系树正在读取状态信息...完成正在修复依赖关系...完成将会同时安装下列软件:dbusdbus-x11fontconfig-configlibasound2:i386libdbus-1-3libdbus-1-3:i386libexpat1libexpat1:i386libfontconfig1libfontconfig1:i386libfreetype6libfre

随机推荐

  1. js中‘!.’是什么意思

  2. Vue如何指定不编译的文件夹和favicon.ico

    这篇文章主要介绍了Vue如何指定不编译的文件夹和favicon.ico,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

  3. 基于JavaScript编写一个图片转PDF转换器

    本文为大家介绍了一个简单的 JavaScript 项目,可以将图片转换为 PDF 文件。你可以从本地选择任何一张图片,只需点击一下即可将其转换为 PDF 文件,感兴趣的可以动手尝试一下

  4. jquery点赞功能实现代码 点个赞吧!

    点赞功能很多地方都会出现,如何实现爱心点赞功能,这篇文章主要为大家详细介绍了jquery点赞功能实现代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  5. AngularJs上传前预览图片的实例代码

    使用AngularJs进行开发,在项目中,经常会遇到上传图片后,需在一旁预览图片内容,怎么实现这样的功能呢?今天小编给大家分享AugularJs上传前预览图片的实现代码,需要的朋友参考下吧

  6. JavaScript面向对象编程入门教程

    这篇文章主要介绍了JavaScript面向对象编程的相关概念,例如类、对象、属性、方法等面向对象的术语,并以实例讲解各种术语的使用,非常好的一篇面向对象入门教程,其它语言也可以参考哦

  7. jQuery中的通配符选择器使用总结

    通配符在控制input标签时相当好用,这里简单进行了jQuery中的通配符选择器使用总结,需要的朋友可以参考下

  8. javascript 动态调整图片尺寸实现代码

    在自己的网站上更新文章时一个比较常见的问题是:文章插图太宽,使整个网页都变形了。如果对每个插图都先进行缩放再插入的话,太麻烦了。

  9. jquery ajaxfileupload异步上传插件

    这篇文章主要为大家详细介绍了jquery ajaxfileupload异步上传插件,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  10. React学习之受控组件与数据共享实例分析

    这篇文章主要介绍了React学习之受控组件与数据共享,结合实例形式分析了React受控组件与组件间数据共享相关原理与使用技巧,需要的朋友可以参考下

返回
顶部