         @_skipUpdate = true
         @value newValue
   
-  @method '_valueChanged', (oldValue, newValue) ->
-    if @_skipUpdate
-      @_skipUpdate = false
-    else if @_loaded
-      @_selectElement[0].selectedIndex = if @_valueIndex[newValue]? then @_valueIndex[newValue] else 0
+  @method 'setValue', (newValue) ->
+    if @isValueValid(newValue)
+      @_value = newValue
+      if @_skipUpdate
+        @_skipUpdate = false
+      else if @_loaded
+        @_selectElement[0].selectedIndex = if @_valueIndex[newValue]? then @_valueIndex[newValue] else 0
   
   @method '_valuesChanged', (oldValues, newValues) ->
-    @value null unless @_values[@_value]
+    @value null unless @isValueValid(@value)
     @renderOptions() if @_loaded
   
   @method '_idChanged', (oldValue, newValue) ->

ST.class 'EnumFieldView', 'View', ->
  @initializer 'withValuesNull', (values, _null) ->
    @init()
    @_value = null
    @_null = _null
    @_values = values
    @_valueIndex = {}

      html.push '<option value=""'
      html.push ' selected="selected"' if @_value is null
      html.push '></option>'
    for option in @_values
      html.push '<option value="', option[1], '"'
      html.push ' selected="selected"' if @_value == option[1]
      html.push '>', option[0], '</option>'
      @_valueIndex[option[1]] = index++
    @_selectElement.html html.join('')
  
  @method 'selectChanged', (e) ->
