从另一个视图更新对象

时间:2013-09-12 03:00:34

标签: javascript backbone.js

我有一个骨干视图(ItemDetailedView)哪个容器另一个视图(ShopItemDetailedView)。在ShopItemDetailed视图中,我有一个img,点击它时需要更新ItemDetailed模型。换句话说,它需要在ItemDetailed模型上调用fetch。我如何在ShopItemDetailed上执行此操作?我正在考虑将商品模型传递给商店模型,然后设置商品的ID。但是我不认为这是一个很好的解决方案,因为它违背了解耦原则。这是我的ShopItemDetailedView

上的一些代码
 loadNewItem: function(itemid) {
        //i want to change set the item id here that is on ItemDetailedView
    }, 

我在考虑发布者和订阅者方法,这样在这个事件中我会发布一个事件来发送它应该获取的项目的新id。不确定如何做到这一点

2 个答案:

答案 0 :(得分:1)

这是未经测试的,但您应该能够做到这样的事情:

window.EVENT_BUS = {};

_.extend(EVENT_BUS, Backbone.Events);

// inside ShopItemDetailed click handler
EVENT_BUS.trigger('ShopItemDetailedClick', {id: 'foo'});

// inside ItemDetailedView initialize
EVENT_BUS.on('ShopItemDetailedClick', function (args) {
    console.log('do something with ', args.id);
});

答案 1 :(得分:0)

此外,如果ShopItemDetailedView具有订阅者角色且ItemDetailedView将具有观察者角色,则可以触发视图事件:

loadNewItem: function(itemid) {
    this.trigger('itemShop');
}

订阅ItemDetailedViewShopItemDetailedView的itemShop活动

ItemDetailedView = Backbone.View.extend({
    initialize : function() {
        shopItemDetailedViewInstance.on('itemShop', this.itemShop);
    },
    itemShop : function(){
        //your observer code here
    }
});