Идеи по созданию уникального имени объекта javascript в ASP.Net?

Я создал пользовательский элемент управления ASP.Net, который будет размещаться на веб-странице более одного раза. В этом элементе управления я определил объект javascript, например:

function MyObject( options )
{
  this.x = options.x;
}

MyObject.prototype.someFunction=function someFunctionF()
{
  return this.x + 1;
}

В коде позади я создал MyObject в сценарии запуска -

var opts = { x: 99 };

var myObject = new MyObject( opts );

При нажатии определенной кнопки в элементе управления вызывается myObject.someFunction (). Теперь предположим, что значение x будет 99 для одного элемента управления, но 98 для другого элемента управления. Проблема здесь в том, что var myObject будет повторяться, и только последний экземпляр будет иметь значение. Конечно, есть способ сделать var myObject уникальным, используя концепцию, с которой я еще не сталкивался. Идеи?

Спасибо,

Крейг

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
806
5
Перейти к ответу Данный вопрос помечен как решенный

Ответы 5

Если это всего лишь одно значение, почему бы не сделать так, чтобы функция приняла его как параметр и построила обработчик onclick, чтобы он вставлял правильное значение для каждого элемента управления. Если это более сложно, рассмотрите возможность создания параметров в виде массива и для каждого элемента управления вставьте правильные параметры в то место в массиве, которое соответствует каждому конкретному элементу управления. Затем передайте в функцию правильный индекс массива.

Я делаю это, используя ScriptManager.RegisterClientScriptBlock для регистрации строки как блока JavaScript на стороне клиента. Затем я могу изменить строку сценария, используя заполнители {0}, {1} .., {n}, чтобы ввести необходимые идентификаторы. Это зависит от структуры вашего кода, если это самый элегантный способ, но он работает в крайнем случае. Затем вы можете ввести имена переменных, используя ссылки на Me.ClientID.

Вы можете сделать значение «x» статическим и получить к нему доступ в любом месте кода, например:

function MyObject( options ) { MyObject.x = options.x; }
MyObject.x = 99; // static
MyObject.prototype.someFunction = function () { return MyObject.x + 1; }

Таким образом, вы можете получить доступ к MyObject.x в любом месте вашего кода, даже без повторного создания экземпляра MyObject.

Ответ принят как подходящий

Ваш Javascript такой: -

function MyObject(options) { this.x = options.x; }
MyObject.prototype.someFunction = function() { return this.x + 1; }
MyObject.create(id, options) {
    if (!this._instances) this._instances = {};
    return this._instances[id] = new MyObject(options);
}
MyObject.getInstance(id) { return this._instances[id]; }

Ваш запускаемый javascript выглядит так: -

MyObject.create(ClientID, {x: 99});

Другой код, который должен использовать экземпляр (скажем, в событии onclick на стороне клиента)

String.Format("onclick=\"MyObject.getInstance('{0}').someFunction()\", ClientID);

Обратите внимание на незначительное влияние на глобальное пространство имен клиентов, в глобальное пространство имен добавляется только идентификатор MyObject, независимо от того, сколько экземпляров вашего элемента управления добавлено на страницу.

Отличное решение Энтони. Другие предлагаемые решения были столь же хороши, и я рассматривал их, но я искал что-то более элегантное, как это решение. Спасибо!

Другие вопросы по теме