0

我有一个主干视图(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。不知道如何做到这一点

4

2 回答 2

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);
});
于 2013-09-12T03:16:35.527 回答
0

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

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

并订阅ItemDetailedViewShopItemDetailedViewitemShop 事件

ItemDetailedView = Backbone.View.extend({
    initialize : function() {
        shopItemDetailedViewInstance.on('itemShop', this.itemShop);
    },
    itemShop : function(){
        //your observer code here
    }
});
于 2013-09-12T03:28:47.053 回答