neft
Version:
Universal Platform
79 lines (58 loc) • 2.35 kB
text/coffeescript
'use strict'
Binding = require 'src/binding'
module.exports = (impl) ->
class RendererBinding extends Binding
pool = []
= (obj, prop, binding, component, ctx) ->
if elem = pool.pop()
RendererBinding.call elem, obj, prop, binding, component, ctx
RendererBinding.New obj, prop, binding, component, ctx, elem
= (obj, prop, binding, component, ctx, target) ->
target ?= new RendererBinding obj, prop, binding, component, ctx
Binding.New binding, ctx, target
target.update()
target
onComponentObjectChange = (id) ->
for conn in
while conn.child
conn = conn.child
if conn.itemId is id
conn.updateItem()
return
constructor: (, , binding, component, ctx) ->
super binding, ctx
= component
= component.objectsOrder
if = .onObjectChange?
.onObjectChange onComponentObjectChange, @
getItemById: (item) ->
if item is 'this'
else if item is 'view'
impl.Renderer.window
else
.objects[item] or impl.Renderer[item] or null
getValue: ->
[]
setValue: (val) ->
if not val? or val isnt val
val =
[] = val
return
getLoopDetectedErrorMessage: ->
"Potential loop detected. Property binding '#{@prop}' on '#{@item.toString()}' has been disabled."
destroy: ->
# remove from the list
._impl.bindings[] = null
if
.onObjectChange.disconnect onComponentObjectChange, @
super()
pool.push @
return
setItemBinding: (prop, binding, component, ctx) ->
data =
data.bindings ?= {}
data.bindings[prop]?.destroy()
if binding?
data.bindings[prop] = RendererBinding.factory @, prop, binding, component, ctx
return