Ember.js QT W / Javascript桥梁

我们有一个基于QT C ++(mac和windows)的完整桌面应用程序。 我们利用webkit来提供基于HTML和Javascript的用户界面。 我们也通过JavaScript桥与C ++交互。 我正在做相当的overhall,并把Ember.js作为一个更模块化的UI的MVC。

我的问题涉及坚持最好的方法。 我应该坚持使用我们目前正在使用的Javascript对象,还是转换到Ember数据进行持久化,并通过Ember Data(翻译层)中的函数进行读/写?

此外,我们利用webkit,但我应该看到,而不是使用Node.js而不是strait html / js?

我不想做大的改变,但是我想这样做。 有什么build议?

从Ember方面来说,没有理由使用Ember数据,因为Ember在没有Ember数据的情况下工作正常。 但是Ember的基础架构在很大程度上依赖于Ember.Observable提供的API, Ember.Observable所有子类都可以使用这个API。 同样,如果您使用Ember.ArrayEmber.MutableArray ,则JavaScript数组将支持更多的Emberfunction,但除非您禁用Ember.EXTEND_PROTOTYPES否则将自动发生。

所以一个非常合理的方法是将现有的模型类Ember.ObjectEmber.Object 。 这将需要,除其他外,使用getset访问属性。 如果你这样做,那么你的对象将是头等Ember公民,你将有权访问所有Ember的整洁function,包括自动视图更新和数据绑定。

以下是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"}} 

在此示例中,对文本字段的更改将自动传播回基础对象。 (虽然你可以变得聪明,并build立一个文本字段,只有当用户编辑完成后才会传播更改。)

如果您需要将属性更新从Ember传递给QT,请参阅构build具有计算属性的getter和setter或使用observer的指南 。 很大程度上取决于您如何通过JavaScript桥展示您的C ++ API。 但是只要你能够以某种方式绑定到Ember.Observable ,就可以完全访问Ember的所有function。