2012-08-23 2 views
5

두 스크립트 사이에서 데이터를 올바르게 통신하는 방법.스크립트 간 통신 | 세 가지 방법

이 특별한 경우에는 한 스크립트에 요소가 있지만 다른 스크립트에 요소를 추가하려고합니다.

내가 할 수있는 가장 간단한 방법은 전역 창 개체를 중간 단계로 사용하는 것입니다.

그러나 전역은 모범 사례가 아닙니다.

이 요소를 다른 스크립트로 전달하는 올바른 방법은 무엇입니까?

두 스크립트 모두 모듈 패턴으로 캡슐화됩니다.

스크립트 0 만들기 요소 포인트

var element = document.createElement("div"); 
element.innerHTML = response_text; 

스크립트 1 추가] 요소 포인트

Vi.sta = { 

    // implemented in the boot loader - shared global space - appended child already - you don't have to append until now. 
    // Static data has already been composed. 
    // Pull off window and append or best practice 

}; 

모두 모듈 패턴

(function(){ 
    // the code here 
})() 

답변

4

모든 JS 스크립트는 전역 범위에서 실행됩니다. 파일이 클라이언트에 다운로드되면 전역 범위에서 파싱됩니다. File_1.js이

당신이 만약 File_2.js

전에로드되는 한

// File_2.js 
var otherObj = { colour : myObj.colour }; 

:

그래서 당신은

// File_1.js 
var myObj = { colour : "blue" }; 

있어 경우 아무것도이 일에서 당신을 중지 없습니다 즉, MYNAMESPACE = {};이고 각 파일은 네임 스페이스를 모듈을 통해 확장합니다 (즉, 바로 호출하는 함수에서 반환되는 인터페이스를 참조하는 "모듈 패턴"대신). 모듈이 있는지 확인하십시오.

네임 스페이스로 된 응용 프로그램 용 모듈을 작성하고 한 모듈에서 다른 모듈로 변수에 액세스해야하는 경우 interface을 제공해야합니다. 당신이 SANDBOXING 모듈 인 경우

는 다음을 제공해야 모든 mediator-pattern에 따라 service-locator 또는 "registry", 또는 개발 messaging-system 유사한 proxy.

+0

두 스크립트 모두 모듈 패턴에 캡슐화되어 있다고 언급 했으므로 ... –

+0

@HiroProtagonist *** *** 모듈 패턴을 언급하지 않았습니다. 당신은'revealing-module'에 대해 이야기하고 있습니까, 당신은'네임 스페이스 (namespacing)'에 대해 이야기하고 있습니까, 아니면'샌드 박스링 (sandboxing) '에 대해 이야기하고 있습니까? 세 가지 모두 매우 다른 해결 방법을 사용하기 때문에 우리는 그것이 무엇인지를 알 수있는 방법이 전혀 없기 때문에 올바른 해결 방법을 알 수있는 방법이 없습니다. – Norguard

+1

Google에 좋은 핵심 단어가 많이 있습니다. 감사하겠습니다. –

5
window.sharedSpace = {}; 
sharedSpace.sharedValue = 'foo bar'; 
에 캡슐화

그런 식으로 여러 가지 대신 하나의 전역 개체 만 가질 수 있습니다.

+0

나는이 글을 쓰는 과정에있었습니다. 필자가 제안한 유일한 방법은 선언하기 전에'window.sharedSpace'의 존재를 확인하는 것입니다. – jackwanders

+0

한 스크립트에서 돌아와 다른 스크립트로 가져 오는 것은 ... 전역을 피하는 방법으로 이것이 더 좋을 수도 있습니까? –

+0

'돌아 오는'부분은 전역 함수가 필요합니다. 어느 쪽이 뒤로 가겠습니까. –

1

요소를 모듈의 함수에 전달하지 않는 이유는 무엇입니까?

var module1 = (function() { 
    return { 
     func1: function() { 
      // get your element 
      var someElement = ...; 

      // pass it to the other module 
      module2.func2(someElement); 
     } 
    }; 
})(); 

var module2 = (function() { 
    return { 
     func2: function (someElement) { 
      // do whatever you want with someElement 
     } 
    }; 
})(); 
+0

심지어 간단하게, 왜 요소 또는 개체를 내 보낸 다음 그것을 사용하여 가져 오지 않을까요? 모듈 패턴의 전역 가져 오기 기능 ... 두 가지 모두 작동한다고 생각합니다. –

+0

@HiroProtagonist 나는 "global imports"에 익숙하지 않다. – jbabey

+0

IIFE에서 가장 마지막'()'에 'global import'라고 불리는 매개 변수를 넣으면 가장 단순한 변수를 사용하여 최적화된다. 글로벌 스코프가 이제는 수입되고 스코프 조회 체인이 감소됩니다. –