视图行为笨拙
Posted
技术标签:
【中文标题】视图行为笨拙【英文标题】:Views behave awkwardly 【发布时间】:2014-01-01 09:42:04 【问题描述】:考虑 Backbone.js 源代码的一部分:
// List of view options to be merged as properties.
var viewOptions = ['model', 'collection', 'el', 'id', 'attributes', 'className', 'tagName', 'events'];
var View = Backbone.View = function(options)
this.cid = _.uniqueId('view');
options || (options = );
_.extend(this, _.pick(options, viewOptions));
this._ensureElement();
this.initialize.apply(this, arguments);
this.delegateEvents();
;
我想知道为什么只有 'model'、'collection'、'el'、'id'、'attributes'、'className'、'tagName'、'events' 被分配给 View 实例。我觉得这很烦人。我通常需要发送一些额外的参数。是否可以将_.extend(this, _.pick(options, viewOptions));
替换为
_.extend(this, options));
?
【问题讨论】:
【参考方案1】:为什么不将额外数据存储在属性哈希中?
如果您真的想直接在视图上设置其他属性,您也可以将其作为属性选项传入,然后在初始化方法中将其设置在视图对象上:
var MyView = Backbone.View.extend(
initialize: function()
var self = this;
if (this.attributes)
_.each(this.attributes, function(val, key)
self[key] = val;
);
);
var view = new MyView( attributes: foo: 'bar' );
【讨论】:
确实我现在使用类似的代码。我想知道var viewOptions = ['model', 'collection', 'el', 'id', 'attributes', 'className', 'tagName', 'events'];
背后的原因
啊。是的,我不知道白名单背后的原因。也许是为了保持***视图属性整洁。或者使用 attributes 属性在视图中存储任意数据是为了与模型的实现方式保持一致?我想我的倾向通常只是为了避免修改第三方源代码:)以上是关于视图行为笨拙的主要内容,如果未能解决你的问题,请参考以下文章