Backbone.marionette新手入门系列
已经不用了,所以弃坑。
initialize(options, args...)
1 | const MyObject = MnObject.extend({ |
extend
1 | // Backbone.extend === _.extend |
triggerMethod(methodName, args...)
1 | const MyObject = MnObject.extend({ |
bindEvents(entity, events)
1 | import Radio from 'backbone.radio'; |
unbindEvents(entity, [hashMap])
bindRequests(entity, hashMap)
bindRequests:应该叫bindReply更贴切,绑定的是响应处理函数
hashMap=>{ 'request:name': 'replyHandler' }
unbindRequests(channel, [hashMap])
{ 'request:name': 'replyHandler' }
normalizeMethods(hashMap)
1 | const hash = { |
getOption(optionName)
获取定义在
instance上的option,如果instance没有,则优雅降级从option上查找。
1 | const View = View.extend({ |
Falsey values
getOption将返回任何falsey values而不是undefined,如果getOption在options中无法获取属性,将会直接从instance实例中读取。
mergeOptions(options, props)
把
options中的props中的属性合并到instances实例上
1 | const MyObject = MnObject.extend({ |
options
initialize中的options和对象instance实例化的options一样,所以在initialize中使用options,有必要使用getOption获取.
1 | const MyObject = MnObject.extend({ |
Marionette.View
属性:
el,id,tagName,attributes,className
model,modelEvents,collection,collectionEvents
events,triggers
template,templateContext
childViewEventPrefix,childViewEvents,childViewTriggers
behaviors,ui
regionClass,regions注意:
因为所有的
events都在el上代理,所以如果events中的selector和childViewEvents中的selector相同时,events中的handle能够同时响应events和childViewEvents中触发的事件,解决这个问题很简单,在childViewEvents的handler中阻止事件冒泡传播
render
Marionette.View.render不能被override重写,只能通过before:render
events
Backbone用来绑定DOM事件
triggers
转换
DOM事件=>Marionette Event,就是把DOM Event变为通用的发布订阅事件,这样外部对象就和具体的DOM结构解耦场景适用:
childViewEvents=>parentView主要是解决父子view之间的事件传递.作用:类似
Backbone.Model对象,自身定义了很多Entity Event,entity event会在model的属性变化时触发;而triggers中定义的就是DOM事件到Class Event的一个映射关系,所以handler,可以是view内部(和events效果一样),或者外部其它的Marionette对象也可以处理。
1 | const MyView = View.extend({ |
childViewEvents
ui
就是
query出view context渲染之后的范围内DOM Element(this.$(selector))