2016-08-26 14 views
1

複数のTextFieldで構成されるカスタムコンポーネントを作成しようとしています。このコンポーネントはObservableを介して内部的にtwoWayデータバインディングを使用する必要があります。しかし、私はそれを働かせることができません。Nativescript UI Builderとデータバインディング

main.js startに元々

exports.loaded = function(args){ 
    var page = args.object; 
    page.bindingContext = model; 

    var outerContainer = page.getViewById('outerContainer'); 

    model.vma = new Observable({ 
     label: "NiceLabel" 
    }); 
    var vma = durationRow.init({ 
     model: model.vma 
    }); 

    outerContainer.addChild(vma); 
}; 

ウィジェット/ durationrow.js

exports.init = function(options){ 
    model = _.isUndefined(options) 
     ? model 
     : options.model; 

    _.defaults(model, { 
     label:  "no data given", 
     start:  "", 
     end:  "", 
     duration: "30" 
    }); 

    var durationRow = builder.load({ 
     path: 'widgets/durationRow', 
     name: 'durationRow', 
    }); 

    durationRow.getViewById("startText").bind({ 
     sourceProperty: "start", 
     targetProperty: "text", 
     twoWay: true }, 
    model); 

    return durationRow; 
} 

データ、endは、durationフィールドは、私のXML-レイアウトさビューのtext性質に挿入されます。しかし、モデルの変更は、最初のレンダリング後にUIに伝播することはありません。

私はXMLとこのJSベースのデータバインディングでtext={{ start }}というXMLベースのデータバインディングを試しました。どちらも "初期レンダリング"でのみ動作し、更新はプロモートされません。

提案がありますか? ありがとう!

答えて

1

私はいくつか間違っています。私は私の「ウィジェット」に「データ」を手に入れることができなかったので、initというもの全体を構築しました。

main.js

var row = builder.load({ 
    path: 'widgets/durationRow', 
    name: 'durationRow', 
    attributes: { 
     bindingContext: rowData 
    } 
}); 
:すべてのすべてが、単純な小さな誤差に基づいて発生した後...私はそう... bindContextの代わりに、 bindingContextとすべての地獄を使用するために実用的なソリューションを

を試してみました

これで、durationRow.jsには他に何も必要ありません。 rowDataへのすべてのJSアクセスはbindingContextによって行われ、すべてが魅力のように機能します:)

関連する問題