 	utils.defProp @::, 'children', 'e', ->
 		children = Impl.getItemChildren @_uid
 
+		# TODO: cache array for the optimization
 		for child, i in children
 			children[i] = items[child]
 


	utils.defProp @::, 'width', 'e', ->
		Impl.getItemWidth @_uid
	, (val) ->
		if typeof val is 'number'
			expect(val).toBe.float()
			expect(val).not().toBe.lessThan 0
			Impl.setItemWidth @_uid, val
		else
			setImmediate =>
				binding = new Binding @, val
				Impl.setItemBinding @_uid, 'width', binding

	utils.defProp @::, 'height', 'e', ->
		Impl.getItemHeight @_uid
	, (val) ->
		if typeof val is 'number'
			expect(val).toBe.float()
			expect(val).not().toBe.lessThan 0
			Impl.setItemHeight @_uid, val
		else
			setImmediate =>
				binding = new Binding @, val
				Impl.setItemBinding @_uid, 'height', binding

	utils.defProp @::, 'x', 'e', ->
		Impl.getItemX @_uid
	, (val) ->
		if typeof val is 'number'
			expect(val).toBe.float()
			Impl.setItemX @_uid, val
		else
			setImmediate =>
				binding = new Binding @, val
				Impl.setItemBinding @_uid, 'x', binding

	utils.defProp @::, 'y', 'e', ->
		Impl.getItemY @_uid
	, (val) ->
		if typeof val is 'number'
			expect(val).toBe.float()
			Impl.setItemY @_uid, val
		else
			setImmediate =>
				binding = new Binding @, val
				Impl.setItemBinding @_uid, 'y', binding

	utils.defProp @::, 'z', 'e', ->
		Impl.getItemZ @_uid


		Object.seal @

	createBindedSetter = (propName, setFunc) ->
		(val) ->
			if typeof val is 'string'
				setImmediate =>
					binding = new Binding @, val
					Impl.setItemBinding @_uid, propName, binding
			else
				setFunc.call @, val

	utils.defProp @::, 'id', 'e', ->
		@_uid
	, (val) ->
