2013-10-11 5 views
0

타블렛/휴대 전화 방향에 dojox.mobile.ScreenSizeAware를 사용하고 있습니다.dojox.mobile.ScreenSizeAware 현재 태블릿 또는 휴대 전화 모드인지 확인하는 방법은 무엇입니까?

ScreenSizeAware가 태블릿 모드 일 때 내 앱에서 일부 버튼을 비활성화하려고합니다.

설명서를 확인했으며 현재 디스플레이 모드를 식별하는 isPhone() 메소드가 있습니다. 그러나,이 메서드를 호출하는 방법을 알아낼 수 없습니다. 여기

내 관련 HTML 태그는 방법입니다

<span data-dojo-type="dojox/mobile/ScreenSizeAware" id="sszaware"></span> 
<div data-dojo-type="dojox/mobile/FixedSplitter" data-dojo-props='orientation:"H"' id="mainSplitter"> 

내가 자바 스크립트 코드 다음 시도했지만 말한다 객체/HTMLDivElement와는 어떤 방법 isPhone이 없습니다 :

alert(digit.byId('sszaware').isPhone()); //error 
alert(digit.byId('mainSplitter').isPhone()); //error 
alert(dojo.byId('sszaware').isPhone()); //error 
alert(dojo.byId('mainSplitter').isPhone()); //error 

가 나는 또한 시도 다음, 심지어 오류가있는 경우 :

require(["dojox/mobile/ScreenSizeAware"], function(sSzAw){ 
    alert(sSzAw.isPhone()); //error 
}); 

나는 다음에 이미 가입했습니다. 모드가 바뀌면 내 코드가 작동합니다. 그러나 이러한 주제/이벤트는 디스플레이 모드가 휴대 전화에서 태블릿으로 또는 그 반대로 변경 될 때만 트리거됩니다. 웹 페이지가 브라우저에서로드 될 때 처음에는 트리거되지 않습니다.

require(["dojo"], function(dojo){ 
    dojo.subscribe("/dojox/mobile/screenSize/tablet", function(dim){ //this works fine when orientation changes from phone to tablet mode 
    alert("Reorienting tablet"); 
    showButtons(false); 
}); 

dojo.subscribe("/dojox/mobile/screenSize/phone", function(dim){ //this works fine when orientation changes from tablet to phone mode 
    alert("Reorienting phone"); 
    showButtons(true); 
}); 
}); 

나는 검색을 많이했지만 ScreenSizeAware의 프로그램 사용에 대한 예를 찾을 수 없습니다. 결국 내 문제를 해결하기 위해 stackoverflow에 전문가에게 문을 열고 있습니다.

답장을 미리 보내 주셔서 감사합니다.

답변

0

dijit/byId 대신 dijit.byId을 사용해보십시오. 당신이 AMD 구문을 사용하는 경우, 그것은

require(["dijit/registry"], function(registry) { 
    console.log(registry.byId("sszaware").isPhone()); 
}); 

될하지만 dojox/mobile/ScreenSizeAware 모듈이 실험 인 것으로보고 있다고 생각 해주십시오. 버전을 변경하면 API가 크게 변경 될 수 있습니다.

+0

답장을 보내 주셔서 감사합니다. Dimitri. 사실 나는 위의 내 질문에 오타가있었습니다. 나는'digit'가 아닌'dijit'을 제 코드에 사용하고있었습니다. 귀하의 추천을 시도하고 여전히 followinng 오류가 발생 :'Uncaught TypeError : 메서드를 호출 할 수 없습니다 'isPhone'undefined'. 나는 내 질문에 언급 한 HTML 태그 (한 번에 하나씩)에'sszaware' id를 넣으려고했으나 둘 중 하나에서 작동하지 않습니다. 귀하의 도움을 크게 주시면 감사하겠습니다. – user2318002

+0

여기서하고있는 것처럼 클래스에없는 ScreenSizeAware 인스턴스에서 isPhone 메서드를 호출해야합니다. – Christophe

+0

안녕하세요 Chris, HTML 태그를 통해 이미 만든 ScreenSizeAware 인스턴스에 대한 참조를 얻으려면 어떻게해야합니까? – user2318002

0

이 시도 :

require(["dojo/ready", "dojox/mobile/ScreenSizeAware"], function(ready, ssa) { 
    ready(function(){ 
     console.log("isPhone: " + ssa.getInstance().isPhone()); 
    }); 
}); 

는 (예를 들어, 한 DojoX/이동/테스트/test_ScreenSizeAware-데모 tag.html 참조).

+0

좋아,이 isPhone()'메서드에 액세스 할 수있는 관점에서 잘 작동하는 것 같다. 그러나'ScreenSizeAware'가 폰 모드 또는 태블릿 모드에 있더라도 isPhone()은 항상 false를 반환합니다. 따라서, 내 문제는 아직 해결되지 않았다 : ( – user2318002

+0

''ssa.getInstance()'는 새로운 ScreenSizeAware 인스턴스를 만들고 실제로 기존 인스턴스에 대한 참조를 얻지 못한다는 것을 깨달았다. 그래서 isPhone() 항상 false를 반환합니다.원래의 질문에 나열된 HTML 태그를 통해 선언적으로 생성되는 기존의'ScreenSizeAware' 인스턴스에 대한 참조를 얻는 방법을 알아야합니다. – user2318002

+0

이 문제를 해결할 수있었습니다. 문제는 ScreenSizeAware에 별도의 span 태그를 포함했기 때문입니다. 이 별도의 태그를 유지하는 대신 고정 Splitter 태그에서'ScreenSizeAware = true '를 추가하면'ssa = ScreenSizeAware.getInstance()'로 객체에 대한 참조를 얻을 수있었습니다. – user2318002