从对象获取函数名称或函数的一些唯一id

时间:2015-06-04 16:23:09

标签: javascript backbone.js

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()

1 个答案:

答案 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);
  };