HTML フロントエンド (主にビュー) と Python バックエンド (主にドキュメント) を使用してデスクトップ アプリケーションを開発しています。
ドキュメントは入力要素を使用して更新されます。ビューは updateView 関数を呼び出して更新されます (ドキュメントを開く、元に戻す/やり直す、ギズモなど)。
そのため、ユーザーが何かを入力したときにドキュメントに通知する必要があります。変更は、オブザーバブルをサブスクライブし、updateDocument を呼び出すことによって検出されます。
主な問題は、ビューがバックエンドによって直接更新された場合、ドキュメントに通知する必要がないことです。
ドキュメントに再度通知せずに updateView を使用してビューを更新するにはどうすればよいでしょうか?
HTML を表示:
<!DOCTYPE html>
<html lang="fr">
<head>
<meta http-equiv="Content-type" content="text/html;charset=UTF-8" />
<script type="text/javascript" src="jsext/jquery-2.0.3.min.js"></script>
<script type="text/javascript" src="jsext/knockout-2.3.0.js"></script>
<script type="text/javascript" src="jsext/knockout.mapping.js"></script>
<script type="text/javascript" src="js/document.js"></script>
<script type="text/javascript" src="js/view.js"></script>
</head>
<body>
<div id="datas">
<div>
<p>
<label>x : </label>
<input type="text" data-bind="value: x"/>
</p>
<p>
<label>y : </label>
<input type="text" data-bind="value: y"/>
</p>
<p>
<label>z : </label>
<input type="text" data-bind="value: z"/>
</p>
<p>
<label>rx : </label>
<input type="text" data-bind="value: rx"/>
</p>
<p>
<label>ry : </label>
<input type="text" data-bind="value: ry"/>
</p>
<p>
<label>rz : </label>
<input type="text" data-bind="value: rz"/>
</p>
<p>
<label>s : </label>
<input type="text" data-bind="value: s"/>
</p>
</div>
</div>
</body>
</html>
JS を表示:
var _viewModel;
var subscriptions = [];
$(document).ready(function(){
_viewModel = new Transform( );
ko.applyBindings( _viewModel );
} );
function makeObservable() {
var ob = ko.observable( 0.0 );
ob.subscribe( function (val) {
updateDocument( ko.toJSON( _viewModel ) );
});
return ob;
}
function Transform() {
this.__type__ = makeObservable();
this.x = makeObservable();
this.y = makeObservable();
this.z = makeObservable();
this.rx = makeObservable();
this.ry = makeObservable();
this.rz = makeObservable();
this.s = makeObservable();
}
function updateView( jsonDocument ){
var jsonDocument = JSON.parse( jsonDocument );
_viewModel.x( jsonDocument[ "x" ] );
_viewModel.y( jsonDocument[ "y" ] );
_viewModel.z( jsonDocument[ "z" ] );
_viewModel.rx( jsonDocument[ "rx" ] );
_viewModel.ry( jsonDocument[ "ry" ] );
_viewModel.rz( jsonDocument[ "rz" ] );
_viewModel.s( jsonDocument[ "s" ] );
_viewModel.__type__( jsonDocument[ "__type__" ] );
}
ありがとう