0

我正在爲Weebly創建拖動&拖放元素。 Weebly將每個元素包裝在Backbone JS視圖中,如explained here銷燬事件或將外部DOM項鍊接到Backbone模型

// 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. 
    } 
}); 

當骨幹觀點是initialize d,我一個新的DOM節點添加到外部導航菜單。我的問題從這裏開始:當我的模型被銷燬時,我創建的DOM節點仍然存在。

每次用戶在網頁設計器界面中重新配置我的元素時,Weebly會破壞/重新創建視圖。我的外部菜單節點不會被破壞,因爲它不是模型的一部分,並且我的JS沒有意識到destory事件可以手動刪除菜單節點。

當然,這意味着每個更改爲我的元素創建另一個重複的菜單節點。

問題

  1. 是否有一個事件Weebly暴露給我,或者本地骨幹功能暴露給我,讓我知道,我的模型被銷燬?
  2. 或者,有沒有辦法將我的外部菜單節點「鏈接」到我的模型,以便當我的模型被銷燬時,菜單節點也是如此?

回答

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 
+1

['.listenTo' VS'.on'(https://stackoverflow.com/q/16823746/1218980) –

+0

@EmileBergeron我只是好奇,使用'on'和'listenTo'在答案中似乎是正確的。怎麼了? –

+0

@TJ是的,但應該避免'on',我想指出。 –