public static bool IsInChildObject(this FieldView self)
 {
     return(self.fieldName != self.fullPath);
 }
 public static void LinkToModel(this FieldView self, string text)
 {
     self.mainLink.Get <Text>().text = text;
 }
 public static bool LinkToJsonModel(this FieldView self, JObject root, JToken value)
 {
     if (self is EnumFieldView enumFieldView && value?.Type == JTokenType.Integer)
     {
         int posInEnum  = int.Parse("" + value);
         var enumValues = self.field.contentEnum;
         enumFieldView.LinkToModel(enumValues[posInEnum], newVal => {
             var newPosInEnum = Array.FindIndex(enumValues, x => x == newVal);
             var jValueParent = self.CreateJValueParentsIfNeeded(root);
             if (value is JValue v)
             {
                 v.Value = newPosInEnum;
             }
             else
             {
                 value = new JValue(newPosInEnum);
                 jValueParent[self.fieldName] = value;
             }
         });
         return(true);
     }
     if (self is InputFieldView inputFieldView)
     {
         inputFieldView.LinkToModel("" + value, newVal => {
             try {
                 var newJVal      = self.field.ParseToJValue(newVal);
                 var jValueParent = self.CreateJValueParentsIfNeeded(root);
                 if (value is JValue v)
                 {
                     v.Value = newJVal.Value;
                 }
                 else
                 {
                     value = newJVal;
                     jValueParent[self.fieldName] = value;
                 }
             } // Ignore errors like e.g. FormatException when "" is parsed to int:
             catch (FormatException e) { Log.w("" + e, self.gameObject); }
         });
         return(true);
     }
     if (self is BoolFieldView boolFieldView)
     {
         bool val = (value as JValue)?.Value <bool>() == true;
         boolFieldView.LinkToModel(val, newVal => {
             var jValueParent = self.CreateJValueParentsIfNeeded(root);
             if (value is JValue v)
             {
                 v.Value = newVal;
             }
             else
             {
                 value = new JValue(newVal);
                 jValueParent[self.fieldName] = value;
             }
         });
         return(true);
     }
     if (self is SliderFieldView sliderFieldView)
     {
         bool  isInt = sliderFieldView.field.GetJTokenType() == JTokenType.Integer;
         float val   = float.Parse("" + value);
         sliderFieldView.LinkToModel(val, newVal => {
             var jValueParent = self.CreateJValueParentsIfNeeded(root);
             if (value is JValue v)
             {
                 if (isInt)
                 {
                     v.Value = (long)newVal;
                 }
                 else
                 {
                     v.Value = newVal;
                 }
             }
             else
             {
                 value = isInt ? new JValue((int)newVal) : new JValue(newVal);
                 jValueParent[self.fieldName] = value;
             }
         });
         return(true);
     }
     if (self.field.readOnly == true)
     {
         self.LinkToModel("" + value);
         return(true);
     }
     return(false);
 }