Ember.js QT w/ Javascript Bridge

Ember.js QT w/ Javascript Bridge

本文关键字:Javascript Bridge js QT Ember      更新时间:2023-10-16

我们有一个完整的桌面应用程序基于QT c++ (mac &windows)。我们利用webkit来提供基于HTML和Javascript的UI。我们还通过javascript桥与c++进行交互。我正在做相当的大厅和合并烬.js作为MVC更模块化的UI。

我的问题是关于持久性的最佳方法。我应该坚持我们目前使用的Javascript对象,还是转换到Ember Data持久化,并通过Ember Data(转换层)中的函数读写?

我们也利用webkit,但我应该看到,而不是利用Node.js而不是海峡html/js?

我不想做剧烈的改变,但我想把它做好。任何建议吗?

从余烬方面来看,没有理由使用余烬数据,因为没有它余烬工作得很好。但是Ember的基础设施严重依赖于Ember.Observable提供的API, Ember.Object的所有子类都可以使用。同样,如果你使用Ember.ArrayEmber.MutableArray, JavaScript数组将支持更多的Ember特性,尽管这将自动发生,除非你禁用Ember.EXTEND_PROTOTYPES

因此,一个非常合理的方法是将现有的模型类移植到Ember.Object。这将需要,除其他外,使用getset访问属性。如果你这样做,那么你的对象将是第一类烬公民,你将有机会获得烬的所有整洁的功能,包括自动视图更新和数据绑定。

这是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的所有功能。