1

我们有一个基于 QT C++(mac 和 windows)的完整桌面应用程序。我们利用 webkit 来提供基于 HTML 和 Javascript 的 UI。我们还通过 javascript 桥与 C++ 交互。我正在做大量的工作,并将 Ember.js 作为 MVC 合并为一个更加模块化的 UI。

我的问题与持久性的最佳方法有关。我应该坚持使用我们目前使用的 Javascript 对象,还是过渡到 Ember Data 进行持久化,并通过 Ember Data(翻译层)中的函数进行读/写?

我们也使用 webkit,但我应该看看使用 Node.js 而不是 strait html/js 吗?

我不想做剧烈的改变,但我想把这件事做对。有什么建议吗?

4

1 回答 1

1

在 Ember 方面,没有理由使用 Ember Data,因为没有它,Ember 也能正常工作。Ember.Observable但是 Ember的基础架构严重依赖于Ember.Object. Ember.Array同样,如果您使用和,JavaScript 数组将支持更多 Ember 功能Ember.MutableArray,但除非您禁用Ember.EXTEND_PROTOTYPES,否则这将自动发生。

因此,一种非常合理的方法是将现有模型类移植到Ember.Object. 除其他外,这将需要使用getset访问属性。如果您这样做,那么您的对象将成为 Ember 的一等公民,并且您将可以访问 Ember 的所有简洁功能,包括自动视图更新和数据绑定。

下面是它的Ember.Object外观,以及它如何与 Ember 的其余部分集成:

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>

…并且视图会在任何时候自动更新firstNamelastName更改。同样,您可以firstName使用以下代码进行编辑:

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

在此示例中,对文本字段的更改将自动传播回基础对象。(尽管您可以变得聪明并构建一个仅在用户完成编辑时才传播更改的文本字段。)

如果您需要将属性更新从 Ember 传递到 QT,请参阅使用计算属性构建 getter 和 setter 的指南或使用观察者。很大程度上取决于您通过 JavaScript 桥接器公开 C++ API 的方式。但只要你能Ember.Observable以某种方式参与其中,你就可以完全访问 Ember 的所有功能。

于 2013-04-11T12:49:41.020 回答