2017-04-25 15 views
0

varとしてQMLに格納された "data"というネストされたvarlistを再帰したいと思います。一部のデリゲートのプロパティを宣言する、"delegates": [ { ... }, ... , { ... } ]という名前の属性が含まれています。これらの属性サブリストの1つに属性「"data"」が含まれている場合、その特定のデリゲートのアクションによって横断されるサブレベルがもう1つあります。QML/Javascript:ネストされたvarマッチング内のサブアレイへの自己参照属性の追加一部の識別子

私はvarlistに再帰的に追加する関数を作成します"data"サブレベル)、その名前に一致するサブレベル(例えば、"data")が検出された場合には、親レベルへのポインタを使用します。data.delegates[0].dataが存在する場合は、data.delegates[0].data.parentPointer: dataに相当するものを追加したいと思います.がある場合は、 data.delegates[0].data.delegates[0].data.parentPointer: data.delegates[0].dataなどと等価です。

私は特に(計算上の)コストについては心配していません。 imeイベントはpragma SingletonComponent.onCompletedであり、ネストはたかだか数レベルしかありません。

自己参照ポインタの作成を自動化する方法は、再帰的なfunction呼び出し(これはJavascript for QMLの定義に従います)を介して行われると信じているので、これはJavascriptの問題です。しかし

if (typeof currentLevel.data !== "undefined") { 
    //do stuff.... 
} 

function appendStuff(myVar) { 
    var temp = myVar 
    temp.push("stuff") 
    myVar = temp 
} 

と私は条件付きのw /中 varのような名前の属性のJavaScriptで確認することができます知っている:私はQMLにJavaScriptで簡単な varセットの操作を追加行う方法を知っています、私は、再帰的な側面 - マルチレベル配列を再構築する方法 - 私の編集されたバージョンが完成するまで、元の配列での私の位置を適切に追跡している間、何か問題を抱えています。私はまた、おそらく自分が編集したバージョンが "parentPointer"になるとそれ自体を参照する必要があることを理解しています。これは扱いにくいものです。

アイデア?

+0

入力データと予想される出力データを含めることができますか? – naomik

答えて

1

JSオブジェクトに新しいフィールドを割り当てるには、myjsobject['newprop'] = valueを使用します。

したがって、単純な再帰的関数は、

import QtQuick 2.0 
import QtQuick.Controls 1.4 

ApplicationWindow { 
    id: root 
    visible: true 
    width: 400; height: 450 

    function foo(depth, ref) { 
     var a = { value: depth } 
     if (depth !== 0) { 
      a['next'] = foo(depth - 1, a) 
     } 
     if (ref) a['pred'] = ref 
     return a 
    } 

    property var test: foo(10) 

    Component.onCompleted: console.log(test.value, test.next.value, test.next.pred.value) 
}