gpt4 book ai didi

javascript - 扩展自定义 Backbone.Marionette View 。如何隐式引发原型(prototype)的事件/onRender?

转载 作者:搜寻专家 更新时间:2023-11-01 05:12:04 25 4
gpt4 key购买 nike

我有一个观点:

var MultiSelectCompositeView = Backbone.Marionette.CompositeView.extend({

events: {
'click .listItem': 'setSelectedOnClick'
},

onRender: function () {
console.log("MultiSelectCompositeView onRender has executed.");
}
});

我还有另一个扩展 MultiSelectCompositeView 的 View :

var VideoSearchView = MultiSelectCompositeView.extend({

events: _.extend(MultiSelectCompositeView.prototype.events, {
'input @ui.searchInput': 'showVideoSuggestions',
'click button#hideVideoSearch': 'destroyModel',
'contextmenu @ui.videoSearchResults': 'showContextMenu'
},

onRender: function () {

this.ui.playlistActions.append((new PlaySelectedButtonView()).render().el);
this.ui.playlistActions.append((new SaveSelectedButtonView()).render().el);

// TODO: Is there a better way to do this?
MultiSelectCompositeView.prototype.onRender.call(this, arguments);
}
});

我对 VideoSearchView 没有隐式扩展 MultiSelectCompositeView 的事件并且 VideoSearchView 必须手动调用 MultiSelectCompositeView 的 onRender 方法这一事实感到不满。

Backbone.Marionette 有什么东西可以让我以更无缝的方式扩展我的自定义 View 吗?

最佳答案

你在这里以错误的方式做了两件事。

首先。不要更改 MultiSelectCompositeView 的原型(prototype),只需创建并使用一个新对象:

events : _.extend({}, MultiSelectCompositeView.prototype.events, {
'input @ui.searchInput' : 'showVideoSuggestions'
// ...
})

其次。使用适当的参数执行 super 方法(使用apply 而不是call):

onRender : function () {
// ...
MultiSelectCompositeView.prototype.onRender.apply(this, arguments);
}

或者你可以使用“快捷方式”:

var superProto = MultiSelectCompositeView.prototype;
var VideoSearchView = MultiSelectCompositeView.extend({

onRender : function () {
// ...
superProto.onRender.apply(this, arguments);
}

});

另见 - Super in Backbone .

关于javascript - 扩展自定义 Backbone.Marionette View 。如何隐式引发原型(prototype)的事件/onRender?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21504156/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com