문제

웹 페이지 내부에 두 번 이상 배치 될 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를 독특하게 만들 수있는 방법이 있습니다. 아이디어?

감사,

크레이그

도움이 되었습니까?

해결책

다음과 같은 귀하의 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});

인스턴스를 사용해야하는 다른 코드 (클라이언트 측 온 클릭 이벤트에서는)

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

클라이언트 글로벌 네임 스페이스에 미치는 영향이 낮 으십시오. 컨트롤의 인스턴스가 페이지에 추가 된 인스턴스에 관계없이 MyObject 식별자 만 글로벌 네임 스페이스에 추가됩니다.

다른 팁

하나의 값에 불과한 경우, 기능이 매개 변수로 취하고 onclick 핸들러를 빌드하여 각 컨트롤에 대한 올바른 값을 넣을 수 있도록하는 이유는 무엇입니까? 그보다 더 복잡한 경우 옵션을 배열로 만드는 것을 고려하고 각 컨트롤에 대해 각 특정 컨트롤에 해당하는 배열의 스팟에 올바른 옵션을 삽입하십시오. 그런 다음 적절한 인덱스를 배열로 전달하십시오.

ScriptManager.registerClientscriptBlock을 사용하여 클라이언트쪽에 문자열을 JavaScript 블록으로 등록 하여이 작업을 수행합니다. 그런 다음 {0}, {1} .., {n}를 사용하여 스크립트 문자열을 수정하여 필요한 ID를 주입하기 위해 홀더를 배치 할 수 있습니다. 이것이 가장 우아한 패션인지에 대한 코드 구조에 따라 다르지만 꼬집음으로 작동합니다. 그런 다음 me.clientid에 대한 참조를 사용하여 변수 이름을 주입 할 수 있습니다.

"x"정적 값을 만들고 코드의 어느 곳에서나 액세스 할 수 있습니다.

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

이렇게하면 MyObject를 재 촉진하지 않고도 코드의 어느 곳에서나 MyObject.x에 액세스 할 수 있습니다.

훌륭한 솔루션 Anthony. 제공되는 다른 솔루션은 훌륭했고 나는 그것들을 고려했지만 나는이 솔루션과 같이 조금 더 우아한 것을 찾고있었습니다. 감사!

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top