1

QT C++ (mac & windows) ベースの完全なデスクトップ アプリケーションがあります。Webkit を使用して、HTML と Javascript に基づいた UI を提供します。また、javascript ブリッジを介して C++ と対話します。私はかなりのオーバーホールを行っており、Ember.js を MVC として組み込み、よりモジュラーな UI を実現しています。

私の質問は、永続化のための最良の方法に関するものです。現在使用している Javascript オブジェクトをそのまま使用するか、永続性のために Ember Data に移行し、Ember Data(翻訳レイヤー) の関数を介して読み取り/書き込みを行う必要がありますか?

また、webkit を使用していますが、単純な html/js ではなく Node.js を使用することについて検討する必要がありますか?

大幅な変更はしたくありませんが、これは正しく行いたいと思います。何かアドバイス?

4

1 に答える 1

1

Ember 側から見ると、Ember Data を使用する理由はありません。Ember はそれがなくても問題なく動作するからです。しかし、Ember のインフラストラクチャは、 が提供する API に大きく依存しておりEmber.Observable、これは のすべてのサブクラスで利用できますEmber.Object。同様に、 と を使用するEmber.Arrayと、JavaScript 配列はより多くの Ember 機能をサポートしますが、これは を無効Ember.MutableArrayにしない限り自動的に行われます。Ember.EXTEND_PROTOTYPES

したがって、非常に合理的なアプローチの 1 つは、既存のモデル クラスを に移植することEmber.Objectです。それには、とりわけ、プロパティを使用getsetてアクセスする必要があります。これを行うと、オブジェクトはファーストクラスの Ember 市民になり、ビューの自動更新やデータ バインディングなど、Ember の優れた機能すべてにアクセスできるようになります。

外観と、 EmberEmber.Objectの他の部分との統合方法は次のとおりです。

MyApp.Person = Ember.Object.extend({
  firstName: null,
  lastName: null,

  init: function () {
    // You can put more initialization code here.
  },

  // Compute fullName based on firstName and lastName.
  // This will automatically propagate updates when
  // firstName or lastName changes.
  fullName: function () {
    return this.get("firstName") + " " + this.get("lastName");
  }.property("firstName", "lastName")
});

var person = MyApp.Person.create({ firstName: "Jane", lastName: "Doe" })

次に、Ember ビューでは、次のように記述できます。

<p>{{person.fullName}}</p>

firstName…そしてビューはいつでも、またはlastName変更されるたびに自動的に更新されます。firstName同様に、次のコードを使用して編集できます。

{{view Ember.TextField valueBinding="person.firstName"}}

この例では、テキスト フィールドへの変更は、基になるオブジェクトに自動的に反映されます。(ただし、ユーザーが編集を完了したときにのみ変更を伝達するテキスト フィールドを巧妙に構築することはできます。)

Ember から QT にプロパティの更新を渡す必要がある場合は、計算されたプロパティを使用してゲッターとセッターを構築するためのガイドを参照するか、オブザーバーを使用してください。JavaScript ブリッジを介して C++ API をどのように公開するかによって、多くのことが異なります。しかし、Ember.Observable何らかの方法で接続できる限り、Ember のすべての機能に完全にアクセスできます。

于 2013-04-11T12:49:41.020 に答える