       else ''
     else if match = sub.match /^[=|\+](\w+)$/
       @helpers?[ match[1] ]?.call @
-    else undefined
+    else sub
+
+  getSource: ( segments, source = @model ) ->
+    for segment in segments
+      if segment of source then source = source[ segment ]
+      else
+        console.warn "%s: chain \"%s\" is invalid, segment \"%s\" not exists in %O", @_name, segments.join( '.' ), segment, source
+        return null
+    source
 
   analizeChain: ( chain, source = @model ) ->
     segments = chain.split '.'
     property = segments.pop()
-    for segment in segments
-      if segment of source then source = source[ segment ]
-      else break
-    unless property of source
-      console.warn "%s: chain \"%s\" is invalid", @_name, chain
-      return null
+    return null unless source = @getSource segments, source
     [ source, property ]

        _node.off 'change'
    @

  analize: ( value ) ->
    value.replace /{\s*(.+?)\s*}/g, ( match, sub ) => @analizeMatch sub


      @subscribeTo @model, 'update',  @onSourceUpdated
      @subscribeTo @model, 'destroy', @onSourceDestroyed
      @element.appendTo insertTo
      setTimeout ( => @onShow() ), 5 if @onShow?
      @visible = true
      @runModelCallback 'afterShow'
