Прежде всего, какие-либо сообщения об ошибках в инструменте проверки браузера? Установили ли вы гем jquery-rails
, если нет, перейдите по ссылке ниже и установите его.
https://rubygems.org/gems/jquery-rails/versions/4.3.1
Во-вторых, это может быть из-за того, что. live()
устарела и согласно версия 1.9 полностью удалена.
Попробуйте вместо этого использовать обработчик событий .on()
.
В-третьих, это очень много кода, граничащего с небольшим количеством спагетти-кода для чего-то действительно простого. Что бы я сделал, чтобы упростить его:
$(".message").on("keyup", function () {
var maxlength = $(this).attr("maxlength")
var remaining = $(this).val().length
$(this).next().text(remaining + '/' + maxLengh)
})
Нет необходимости заключать его в $ (document) .ready (), слишком много $ (document) .ready () замедлит время загрузки. (увеличивая время написания скриптов) при обновлении приложения. В зависимости от того, как вы настроили ваше приложение rails для выполнения javascript, вы можете обернуть все ваши javascript / jquery в один большой $ (document) .ready (), который будет выполнять один раз при Обновление приложения.
Кроме того, .on () - это прослушиватель событий, который прослушивает и ждет, когда что-то произойдет, например .on ("keyup", function (). Вы можете отключить прослушиватель событий, используя $(".message").off()
Немного чрезмерного совместного использования, но знание того, как слушатели событий и делегирование событий жизненно важно для написания хорошего jQuery.
Я использую Description
атрибут от Системы. Пространство имен ComponentModel. Просто украсьте перечисление:
private enum PublishStatusValue
{
[Description("Not Completed")]
NotCompleted,
Completed,
Error
};
Затем используют этот код для получения его:
public static string GetDescription<T>(this T enumerationValue)
where T : struct
{
Type type = enumerationValue.GetType();
if (!type.IsEnum)
{
throw new ArgumentException("EnumerationValue must be of Enum type", "enumerationValue");
}
//Tries to find a DescriptionAttribute for a potential friendly name
//for the enum
MemberInfo[] memberInfo = type.GetMember(enumerationValue.ToString());
if (memberInfo != null && memberInfo.Length > 0)
{
object[] attrs = memberInfo[0].GetCustomAttributes(typeof(DescriptionAttribute), false);
if (attrs != null && attrs.Length > 0)
{
//Pull out the description value
return ((DescriptionAttribute)attrs[0]).Description;
}
}
//If we have no description attribute, just return the ToString of the enum
return enumerationValue.ToString();
}
Если Вы хотите что-то абсолютно настраиваемое, испытываете мое решение здесь:
http://www.kevinwilliampang.com/post/Mapping-Enums-To-Strings-and-Strings-to-Enums-in-NET.aspx
В основном, сообщение обрисовывает в общих чертах, как присоединить атрибуты Описания к каждому из Ваших перечислений и обеспечивает универсальный способ отобразиться от перечисления до описания.
То, что другое сообщение является Java. Вы не можете поместить методы в Перечисления в C#.
просто делают что-то вроде этого:
PublishStatusses status = ...
String s = status.ToString();
, Если Вы хотите использовать различные значения дисплея для своих перечислимых значений, Вы могли бы использовать Атрибуты и Отражение.
Самое легкое решение здесь состоит в том, чтобы использовать пользовательский дополнительный метод (в.NET 3.5, по крайней мере - можно просто преобразовать его в статический вспомогательный метод для более ранних версий платформы).
public static string ToCustomString(this PublishStatusses value)
{
switch(value)
{
// Return string depending on value.
}
return null;
}
я предполагаю здесь, что Вы хотите возвратить что-то другое, чем подлинное имя перечисления значений (который можно получить путем простого вызова ToString).
Возможно, я пропускаю что-то, но что случилось с Перечислением. GetName?
public string GetName(PublishStatusses value)
{
return Enum.GetName(typeof(PublishStatusses), value)
}
редактирование: для удобных для пользователя строк необходимо пройти .resource, чтобы сделать интернационализацию/локализацию, и возможно было бы лучше использовать фиксированный ключ на основе перечислимого ключа, чем атрибут декоратора на том же.
Я делаю это с дополнительными методами:
public enum ErrorLevel
{
None,
Low,
High,
SoylentGreen
}
public static class ErrorLevelExtensions
{
public static string ToFriendlyString(this ErrorLevel me)
{
switch(me)
{
case ErrorLevel.None:
return "Everything is OK";
case ErrorLevel.Low:
return "SNAFU, if you know what I mean.";
case ErrorLevel.High:
return "Reaching TARFU levels";
case ErrorLevel.SoylentGreen:
return "ITS PEOPLE!!!!";
default:
return "Get your damn dirty hands off me you FILTHY APE!";
}
}
}
По отношению к Рэю Бойсену в коде есть ошибка: Перечисление ToString с удобными для пользователя строками
Необходимо учитывать несколько атрибутов в значениях перечисления.
public static string GetDescription<T>(this object enumerationValue)
where T : struct
{
Type type = enumerationValue.GetType();
if (!type.IsEnum)
{
throw new ArgumentException("EnumerationValue must be of Enum type", "enumerationValue");
}
//Tries to find a DescriptionAttribute for a potential friendly name
//for the enum
MemberInfo[] memberInfo = type.GetMember(enumerationValue.ToString());
if (memberInfo != null && memberInfo.Length > 0)
{
object[] attrs = memberInfo[0].GetCustomAttributes(typeof(DescriptionAttribute), false);
if (attrs != null && attrs.Length > 0 && attrs.Where(t => t.GetType() == typeof(DescriptionAttribute)).FirstOrDefault() != null)
{
//Pull out the description value
return ((DescriptionAttribute)attrs.Where(t=>t.GetType() == typeof(DescriptionAttribute)).FirstOrDefault()).Description;
}
}
//If we have no description attribute, just return the ToString of the enum
return enumerationValue.ToString();