window.VO = {};
window.viewObjects = function (viewName, view) {
if (viewName in VO)
{
console.log('unbinding');
VO[viewName].undelegateEvents();
}
VO[viewName] = view;
return view;
};
我写了上面的函数来处理同一视图的多重渲染。
但现在我需要为每个视图传递一个唯一的名称。
window.viewObjects('BooksIndex', new Views.Dashboard.Books.Index());
有没有办法可以避免参数viewName?
以任何方式从视图对象中获取函数的名称。
但另一个问题是我们有像
这样的观点Dashboard.Books.index()
Dashboard.Stores.index()
答案 0 :(得分:0)
所有Backbone视图都有一个唯一的cid
(客户端ID)。您可以使用此ID来标识视图,而不是指定其他名称。
这样的事情:
window.VO = {};
window.viewObjects = function (view) {
if (view.cid in VO)
{
console.log('unbinding');
VO[view.cid].undelegateEvents();
}
VO[view.cid] = view;
return view;
};
从Backbone annotated code中提取的相关部分,其中在视图创建时设置了新的唯一cid
:
var View = Backbone.View = function(options) {
this.cid = _.uniqueId('view');
options || (options = {});
_.extend(this, _.pick(options, viewOptions));
this._ensureElement();
this.initialize.apply(this, arguments);
};