Backbone JS:一个视图可以触发其他视图的更新吗?

编程入门 行业动态 更新时间:2024-10-26 23:32:08
本文介绍了Backbone JS:一个视图可以触发其他视图的更新吗?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在我的简单项目中,我有 2 个视图 - 订单项视图(品牌)和应用程序.我附加了允许选择多个项目的功能:

<前>var BrandView = Backbone.View.extend({...一些代码...切换选择:函数(){this.model.selected = !this.model.selected;if(this.model.selected) $(this.el).addClass('selected');否则 $(this.el).removeClass('selected');返回这个;}});var AppView = Backbone.View.extend({...一些代码...删除选择:函数(){_.each(Brands.selected(), function(model){model.delete_selected();});返回假;},});

事情是,我想知道选择了多少项.在此设置中,选择不会影响模型,因此不会触发任何事件.从 MVC 概念,我理解视图不应该直接与其他视图交谈.那么 AppView 如何知道在 BrandViews 中选择了某些东西?

更具体地说,我 AppView 知道选择了多少项,所以如果选择了 1 个以上,我会显示一个多选菜单.

解决方案

您可能想阅读有关 Backbone 发布/订阅事件的讨论:

http://lostechies/derickbailey/2011/07/19/references-routing-and-the-event-aggregator-coordinating-views-in-backbone-js/

我喜欢将其作为全局事件机制添加:

Backbone.pubSub = _.extend({}, Backbone.Events);

然后在一个视图中您可以触发一个事件:

Backbone.pubSub.trigger('my-event', payload);

在另一个你可以听:

Backbone.pubSub.on('my-event', this.onMyEvent, this);

In my simple project I have 2 views - a line item view (Brand) and App. I have attached function that allows selecting multiple items:

var BrandView = Backbone.View.extend({
...some code...
    toggle_select: function() {
        this.model.selected = !this.model.selected;
        if(this.model.selected) $(this.el).addClass('selected');
        else $(this.el).removeClass('selected');
        return this;
    }
});

var AppView = Backbone.View.extend({
...some code...
    delete_selected: function() {
        _.each(Brands.selected(), function(model){ 
            model.delete_selected();
        });
        return false;
    },
});

Thing is, I want to know how many items are selected. In this setup selecting is NOT affecting the model and thus not firing any events. And from MVC concept I understand that views should not be directly talking to other views. So how can AppView know that something is being selected in BrandViews?

And more specifically, I AppView to know how many items were selected, so if more than 1 is selected, I show a menu for multiple selection.

解决方案

You might want to have a read of this discussion of Backbone pub/sub events:

http://lostechies/derickbailey/2011/07/19/references-routing-and-the-event-aggregator-coordinating-views-in-backbone-js/

I like to add it in as a global event mechanism:

Backbone.pubSub = _.extend({}, Backbone.Events);

Then in one view you can trigger an event:

Backbone.pubSub.trigger('my-event', payload);

And in another you can listen:

Backbone.pubSub.on('my-event', this.onMyEvent, this);

这篇关于Backbone JS:一个视图可以触发其他视图的更新吗?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

更多推荐

[db:关键词]

本文发布于:2023-03-30 03:40:26,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/768647.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:视图   Backbone   JS

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!