F.Ko-Jiの「一秒後は未来」

Titaniumで「[ERROR] Adding an event listener to a proxy that isn't already in the context」が出る一例と対処法

久しぶりに Titanium Mobile でつくったアプリをリファクタリングしようと、SDKを一気に最新の2.0にしてビルドしてみたら、Consoleに

[ERROR] Adding an event listener to a proxy that isn't already in the context
[ERROR] Adding an event listener to a proxy that isn't already in the context
[ERROR] Adding an event listener to a proxy that isn't already in the context
[ERROR] Adding an event listener to a proxy that isn't already in the context

というエラーがたくさん。どこでエラーが出てるのかコードを追っていくと、 Ti.UI.createButton() をしている箇所で発生していることが判明。

var searchButton = Ti.UI.createButton({
    image: '/images/search-b.png',
    backgroundGradient: headerButtonGradient,
    borderWidth: 1,
    borderColor: '#333',
    borderRadius: 8,
    style: Ti.UI.iPhone.SystemButtonStyle.PLAIN,
    width: app.config.SEARCH_BUTTON_WIDTH,
    height:32,
    top:6,
    right: app.config.SEARCH_BUTTON_RIGHT
});

どこも間違ってる所はなさそうなのに・・・と、オプションを1個ずつ調べてみると「backgroundGradient」をコメントアウトしたらエラーが消えました。

そこでこれらを手がかりに解決策を調べてみると、公式のフォーラムに以下の投稿が。

» [ERROR] Adding an event listener to a proxy that isn't already in the context » Community Questions & Answers » Appcelerator Developer Center

これによると、

A quick and dirty fix for this issue is to set the backgroundGradient AFTER you have created the button and added it to a view.

つまり「createButtonをした後に、backgroundGradientをセットしろ」と。

var searchButton = Ti.UI.createButton({
    image: '/images/search-b.png',
    borderWidth: 1,
    borderColor: '#333',
    borderRadius: 8,
    style: Ti.UI.iPhone.SystemButtonStyle.PLAIN,
    width: app.config.SEARCH_BUTTON_WIDTH,
    height:32,
    top:6,
    right: app.config.SEARCH_BUTTON_RIGHT
});
searchButton.setBackgroundGradient(headerButtonGradient);

こういうことみたいです。確かにエラーが消えてくれました。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

著者について

fkoji

F.Ko-Ji

Webエンジニアやってます。最近は ドットインストール の開発がお仕事です。その傍ら、個人で Meity電車遅延なう梅酒.in#グラドル自画撮り部 の部室といったネットサービスを開発・運営してます。梅酒と草野球とリアル脱出ゲームが好きです。

» 詳しいプロフィールや運営サービスの一覧など