2016-12-20 5 views
3

roku/brightscriptの新機能:グローバル結合配列(すべてのコンポーネントからアクセス可能)にオブジェクトを追加することは可能ですか?そのメソッドはプロパティの1つとして定義されており、そのメソッドを呼び出しますか?匿名関数をグローバル連想配列プロパティに割り当てることはできますか?

Main.brs:

function Main() 
    init() 
end function 

function init()  
    screen = createObject("roSGScreen") 
    m.port = createObject("roMessagePort") 
    screen.SetMessagePort(m.port) 

    scene = screen.CreateScene("MainController") 
    screen.show() 

    o = { 
     getName: function() as string 
      return "John" 
     end function 
    } 

    setUpGlobal(screen) 
    m.global.addFields({mainMethods: o})   

    while(true) 
     msg = wait(0, m.port) 
     msgType = type(msg) 

     if msgType = "roSGScreenEvent" 
      if msg.isScreenClosed() then exit while 
     end if  
    end while   
end function 

function setUpGlobal(p_screen as Object) 
    m.global = p_screen.getGlobalNode() 
    m.global.id = "GlobalNode" 
end function 

...その後、別のメインコントローラで、タスクを実行し、データを返した後...

MainController.brs

function init() 
    loadConfig() 
end function 


function loadConfig() 
    m.config = createObject("roSGNode", "Configurator") 
    m.config.observeField("done", "onConfigLoaded") 
    m.config.observeField("fail", "onConfigError") 
end function 


function onConfigLoaded() 
    print "config loaded: " + m.global.mainMethods.getName() 
end function 


function onConfigError() 
    print "config failed to loaded" 
end function 

それはラインを打ちますMainControllerの16、私はこれを得る:

BrightScriptコンポーネントまたはインターフェイスでメンバー関数が見つかりません。 PKG内 (ランタイムエラー& HF4):/components/MainController.brs(16)

は、これがそうかどうかこれについてコメントしないでください/実行することはできませんができるかの単なる一般的なテストです「良い習慣」であるか否か。私はそれが可能かどうかを知りたいのですが、もしそうなら、私はここで何が欠けていますか?助けをありがとう

答えて

4

あなたはです。は、roAssociativeArrayのような機能を持っています。実際、これはBrightStor ARCでOOメソッドがどのように行われるかです。

ただし、できません Rokuシーングラフオブジェクト(roSgNode派生物)のフィールドに機能を割り当ててください!直接的または間接的(ネスト化)のいずれか。これは(現在の?!)実装の限界です。

あなたははい、それは(最近のような)assocarrayarrayをサポートするために言うんhttps://sdkdocs.roku.com/pages/viewpage.action?pageId=1608549

ここRSGでサポートされているフィールドタイプのリストを見ることができます - しかし、それに注意点があります!スレッド間で複合オブジェクトを割り当てる(またはアクセスする)ときには、ディープコピーが作成され、サポートされているタイプのみが処理を行います。経験によると、functionはその1つではありません。すべての認識されないデータは現在警告なしでさえ、静かに落とされているので、購入者は注意します。

https://forums.roku.com/viewtopic.php?f=34&t=96955&p=541965#p541965を参照してください。 Rokuの開発者フォーラムであなたの声を加えて、RSGによる機能タイプのサポートをリクエストしてください。十分な人が不満を持っているかどうか聞いてみる傾向があります。

+0

答えとしてマークしてください - 詳細な説明をいただきありがとうございます!私はフォーラムに向かうだろう... :) – neoRiley

1

ノードのフィールドに関数を渡すことはできません。データのみ。値を設定した直後にm.global.mainMethods.getNameの値をチェックすると無効になります。

+0

ありがとうございます。ドキュメントは[getGlobalNode()docs](https://sdkdocs.roku.com/display/sdkdoc/ifRoSGScreen#ifRoSGScreen-getGlobalNode()asroSGNodeで説明されているように返されるroSGNodeオブジェクトだと言います) ) - 私は、混乱はroSGNodeのドキュメントで、匿名関数をroAssociativeArrayの値として割り当てることができ、roSGNodeのドキュメントでifAssociativeArray([roSGNode docs](https:// sdkdocs) .roku.com/display/sdkdoc/roSGNode))。テストでは、グローバルに渡されたメソッドが間違いなく無効であることを確認できます。答えとしてマークする。 – neoRiley

関連する問題