销毁事件,或将外部DOM项链接到Backbone模型

时间:2017-09-24 17:14:47

标签: javascript backbone.js backbone-views backbone-events weebly

我正在创造一个拖累& Weebly的drop元素。 Weebly将每个元素包装在Backbone JS视图中,如explained here

// My js file. PlatformElement is a Weebly-controlled object exposed to me.
PlatformElement.extend({
    initialize: function() {
        // Weebly calls this method automatically at element creation time.
        // This is where I add a new menu item to an external navigation menu.
    }
});

当Backbone视图为initialize d时,我将新的DOM节点添加到外部导航菜单。我的问题从这里开始:当我的模型被销毁时,我创建的DOM节点仍然存在。

每次用户在Web设计器界面中重新配置我的元素时,Weebly都会破坏/重新创建视图。我的外部菜单节点没有被销毁,因为它不是模型的一部分,而且我的JS也没有意识到要去除菜单节点的destory事件。

当然,这意味着对我的元素的每次更改都会创建另一个重复的菜单节点。

问题

  1. 是否有一个Weebly暴露给我的事件,或者本机Backbone功能向我公开,让我知道我的模型正在被销毁?
  2. 或者,是否可以通过"链接"我的外部菜单节点到我的模型,这样当我的模型被销毁时,菜单节点也是如此?

1 个答案:

答案 0 :(得分:2)

Backbone确实提供了监听Backbone对象(Model,View,Collection,...)发生的事件的方法。要听取模型的破坏事件,你可以:

const model = new Model({/*...*/});

// solution 1
model.on('destroy', () => console.log('model is destroyed'));

// soluction 2
const view = new View({/*...*/});
view.listenTo(model, 'destroy', () => console.log('model is destroyed'));

model.destroy(); // this will trigger two callbacks above